Es ist schon eine Weile her, dass ich Umbraco benutzt habe. Derzeit wird eine Umbraco 7-Instanz eingerichtet, die viele Formen hat. Ich habe Probleme, ModelState korrekt zu handhaben. Hoffentlich kann jemand erklären, was ich falsch mache. Ich habe in den letzten Tagen viele Artikel gelesen und es sieht so aus, als ob es viele Möglichkeiten gibt, dies zu tun, aber nichts, was ich versucht habe, funktioniert für mich. Ich werde erklären, wo ich gerade bin.Wie gebe ich ein Umbraco 7 MVC-Formular zurück, das eingereicht wurde, aber Fehler aufweist?
Meine Seite Controller, die Ditto verwendet eine stark typisierte Seite Modell zurück:
public override ActionResult Index(RenderModel model)
{
var customModel = model.Content.As<MyCustomPage>();
// Init the model that I want to bind to the form
ViewBag.EditFormModel = new EditFormModel()
{
MyProperty = "init value"
};
return this.CurrentTemplate(customModel);
}
Meine Form Modell:
public class EditFormModel
{
public int Id { get; set; }
[System.ComponentModel.DisplayName("Label")]
[System.ComponentModel.DataAnnotations.Required]
public string MyProperty{ get; set; }
}
Aus meiner Sicht:
@{
// Get the model returned after postback if available, otherwise the initialised model
var editFormModel = TempData["EditFormModel"] as LocationEditFormModel ?? ViewBag.EditFormModel as LocationEditFormModel;
}
@Html.Partial("CustomEditForm", editFormModel)
Das Teilansicht :
@model EditFormModel
@using (Html.BeginUmbracoForm("PostForm", "PostFormSurface", FormMethod.Post))
{
@Html.ValidationSummary(false, string.Empty)
@Html.AntiForgeryToken()
@Html.EditorFor(m => m.MyProperty)
<input type="submit" class="btn btn-primary" value="Submit" />
}
Meine Oberfläche Controller:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult PostForm(LocationSearchFormModel model)
{
bool passesServerSideValidation = this.Validate(model);
if (passesServerSideValidation)
{
// Save and perform a redirect
}
else
{
// I read something that suggested I should clear model state here but it doesn't seem to make a difference
ModelState.Clear();
ModelState.AddModelError(string.Empty, "Not valid");
}
// Add the model to temp data so we can retain values on postback
TempData["SearchFormModel"] = model;
return CurrentUmbracoPage();
}
Das Problem ist, dass, wenn ich die Form, an der Stelle, lege ich traf die Linie return CurrentUmbracoPage();
ich beobachten kann, dass ModelState.IsValid
falsch ist, wie ich erwarten würde. Aber während ich durchtrete, ist der nächste Treffer die Indexmethode im Controller der Seite. Sofort ist ModelState.IsValid
jetzt wahr. Daher wird meine Validierungszusammenfassung nicht angezeigt, wenn das Formular erneut geladen wird.
So klar mache ich hier etwas falsch, aber nichts, was ich bisher gelesen habe, hat mich in die richtige Richtung gezeigt. Ich bin dankbar für deinen Rat.
Vielen Dank für Ihre Zeit, aber das Problem ist, dass CurrentUmbracoPage() mein ModelState durch meine Ansicht nicht beibehalten, so kann ich MVC Validierungszusammenfassung usw. nicht verwenden. Ich habe jetzt eine coole Lösung für dieses Problem gefunden, die ich werde Post hier, wenn ich Zeit habe. – getsetcode
Cool! Werde dann mal schauen :) –