私はウンブラを使ってからしばらくしています。現在、多くのフォームを持つUmbraco 7のインスタンスを設定しています。 ModelStateを正しく処理するのに苦労しています。うまくいけば誰かが私が間違っていることを説明することができます。私はこれらの最後のカップルの多くの記事を読んだが、これを行うには多くの方法があるように見えますが、私が試したことは何も私のために働くものはありません。私は今どこにいるのかを説明します。提出されたがエラーがあるUmbraco 7 MVCフォームを返すにはどうすればよいですか?
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);
}
マイフォームモデル::私の見解では
public class EditFormModel
{
public int Id { get; set; }
[System.ComponentModel.DisplayName("Label")]
[System.ComponentModel.DataAnnotations.Required]
public string MyProperty{ get; set; }
}
:強く型付けされたページモデル返すため同上を使用しています
マイページコントローラ
@{
// 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)
それを部分図:
@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" />
}
マイ表面コントローラ:
[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();
}
問題は、私は、フォームを送信すると、時点で私は私が期待するようModelState.IsValid
が偽であることを観察することができますラインreturn CurrentUmbracoPage();
を打つことです。しかし、私が踏むと、次のラインヒットはページのコントローラーのIndexメソッドです。直ちにModelState.IsValid
が真となりました。したがって、フォームの再ロード時に私の検証サマリは表示されません。
明らかに私はここで何か間違っていますが、私がまだ読んでいないものは正しい方向に私を指摘しています。あなたのアドバイスに感謝します。
CurrentUmbracoPage()を返すとMVCの検証サマリーなどを使用できないため、ModelStateを自分のビューに永続させることができないという問題があります。この問題の解決方法を見つけました。私は時間があるときにここに投稿してください。 – getsetcode
クール!それから見てみましょう:) –