ASP.NET MVC-form unterwirft index statt auf Absenden, um die richtigen Maßnahmen
Ich crated ein Formular, das verwendet werden, als eine partielle Sicht.
Legte ich einen breakpoint auf das 'Speichern' - Aktion, und wenn ich auf den submit-button, es werden die Daten überprüft, aber erreicht nie die Handlung, sondern die Index
Aktion erreicht ist mehrere Male!
Hier ist der code:
@model Models.Category
@using (Html.BeginForm("Save", "Categories", FormMethod.Post))
{
@Html.AntiForgeryToken()
<fieldset>
<legend>Category</legend>
@Html.HiddenFor(model => model.CategoryId)
<p>@((Model.CategoryId > 0 ? "Edit" : "New") + " category")</p>
<div class="editor-label">
@Html.LabelFor(model => Model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model.Title)
@Html.ValidationMessageFor(model => Model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => Model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model.Description)
@Html.ValidationMessageFor(model => Model.Description)
</div>
<p>
<input type="submit" value="Save">
@Html.ValidationSummary(true)
</p>
</fieldset>
}
Handlung:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(Category category)
{
throw new Exception("Exception has been thrown!");
}
Hier ist ein screenshot von dem, was passiert, wenn ich drücken Sie 'Speichern', Validierung Fehler auftaucht, aber die Save
Aktion wird nicht genannt, noch wird die exception immer ausgelöst.
Stattdessen werden die Index
Aktion ausgelöst wird!
Was kann ich sonst noch prüfen, um die Spur zu dem Thema? Wer umgeleitet wird, die Seite zu indizieren???
Sehen Sie die Ausgabe-HTML -hier.
- Komisch, dein controller ist definitiv genannt
Categories
ja? Wenn es geht Validierung, macht es trotzdem reichen, umIndex
? - Ja. Das ist richtig.
- Kannst du die HTML-Ausgabe (aus den browser-dev-tools), die Eröffnung
form
tag? - jsfiddle.net/gRjeT
- Sieht okay aus, ist es ein redirect auf Index in die save-Methode? Können Sie nach dem code für die
Save
- Methode (dem eigentlichen Körper) - Könnte es sein, dass der Authentifizierungs-cookie abgelaufen ist, und so ist es umleiten Ihre home-index-Seite?
- Ich habe sogar versucht, eine Ausnahme zu werfen, die am Eingang des
Save
Aktion, passiert nichts. - Nein, es hat nichts zu tun mit der Authentifizierung. Der Benutzer authentifiziert ist.
- sind Sie absolut sicher, dass Sie das Rendern der richtigen Ansicht? Hast du einen Haltepunkt in die Ansicht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich das problem in den
RouteConfig.cs
Datei.Gab es eine falsche Zuordnung, die verwirrt den routing-und ich denke, es verwendet die
Index
action als default anstelle der spezifischen Aktion, die nicht aufgrund der falschen Einstellung.Versuchen Sie, die
Action
undController
imBeginForm
Methode:BeginForm
Argumente in meinem post, es ist jetzt da, bitte aktualisieren Sie oder löschen Sie Ihre Antwort.Sind Sie mit dezent-Validierung? Wenn ja, ist die Validierung geschieht client-Seite, unter der Annahme, dass das Modell gibt Titel erfordert, die gemäß dem code sieht wahrscheinlich.
Wenn Sie möchten, dass Ihre Aktion genannt zu werden, unabhängig von der Validierung Zustand ist, werden Sie brauchen, um Ihre Validierung in Ihrem handeln, anstatt durch die unaufdringliche client-seitige Validierung.
Ich denke, dies ist aufgrund ValidateAntiForgeryToken können Sie Ihre action-Methode ist nicht die Karte mit dem Formular Anfrage zu entfernen, mit diesem tag oder diesen nach zu geben, in diesem tutorial:
und auch sehen:
Index
Aktion.Save
AktionDieser Fehler kann auch auftreten, wenn die
[Authorize]
tag ist an der Oberseite des Controllers. Wenn der Benutzer nicht eingeloggt ist, Handlungen, die nicht mit markiert[AllowAnonymous]
wird nicht geladen.