Setzen Sie den Fokus auf ASP.NET MVC-Modell-Fehler
Ich habe ein Modell, dass einige Validierung-Prüfung und fügt den Fehler zu ModelState:
ViewData.ModelState.AddModelError("mycontrol", "message")
Zeigen Sie feine Ansicht auf Seite, aber gibt es eine Möglichkeit zum festlegen des Fokus auf das Steuerelement, das entspricht der prüfungsmeldung? Jetzt wird die Seite aktualisiert und bleibt an der Spitze der Seite, so dass, wenn der Fehler gegen Ende der Seite, es ist für den Anwender nicht erkennbar, was passiert ist.
Hinweis: eine Andere Lösung wäre, für das ValidationSummary-zeigen die Liste der Fehler an der Oberseite der Seite, aber ich habe nie in der Lage, es zu zeigen alles. Alle meine Fehler werden angezeigt, über ValidationMessage.
Edit: fand ich mein problem mit dem ValidationSummary. Der markup-Code, den ich hatte war:
<% Html.ValidationSummary()%>
sollte:
<%=Html.ValidationSummary()%>
Ich würde immer noch gerne wissen, wie man snap auf dem Feld mit der Fehlermeldung allerdings.
- ValidationSummary tätig werden sollte. Es funktioniert für mich. Können Sie uns zeigen, einige Ihrer mark-up (vielleicht auch vereinfacht durch weglassen von statischen html -)? Die HtmlHelper-Erweiterung befasst sich mit der gleichen modellzustand zum Rendern der Fehler.
- Ich habe auf halbem Weg durch die Veröffentlichung meiner Beispiel-code, wenn ich bemerkt das fehlende "=" in das markup (und offener Handfläche zur Stirn).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige jquery Güte zu scrollen, bis der erste Eingang mit einem Fehler. Das knifflige bit ist, dass Sie haben, um das zugrunde liegende DOM-element, BEVOR Sie Sie aufrufen focus() als die focus () - Methode auf ein jQuery-Objekt feuert das focus-Ereignis, anstatt den Fokus auf das element.
Könntest du JavaScript verwenden, finden Sie die Eingabeelemente auf der Seite, die das MVC-Validierung HTML-Klasse (input-Validierung-Fehler) Hinzugefügt, und bewegen Sie den Karat-der erste. Das sollte //bewegen Sie den Bildschirm, um das element aus, obwohl ich es noch nicht getestet.
JS-Bibliothek wie jQuery machen dieses einfache zu tun.