送信されたデータをモデルに入力することで、EditorForModel が邪魔になる状況に遭遇しました。私が困ったユースケースをお見せしましょう。
一方では、データベースに保存できるフォームがあります。
public class Person {
[HiddenInput(...)]
public int Id {get; set;}
public string Name {get; set;}
}
コントローラーの反対側には、ユーザーを記録できるアクションがあります。
public class PersonsController {
public ActionResult User(bool SaveAsNew, Person p)
{
if (SaveAsNew)
{
myRepository.Add(p);
myRepository.SaveChange();
// p.Id is now a new Value.
}
else {
Person updateMe = myRepository.Query()
.Where(repoP => repoP.Id = p.Id)
.First();
updateMe.UpdateWith(p)
myRepository.SaveChange();
}
return PartialView(p);
}
}
ビュー側では、@Html.EditorForModel()
「保存」または「新規保存」をクリックするかどうかに応じて、非表示の入力を更新するJavascriptを呼び出しています。
しかしEditorForModel
、投稿されたデータからデータを入力して、ユーザーが [新規として保存] をクリックしたときに Id が変更されないようにするため、ここで問題が発生します。
そのため、提出されたデータをクリアする方法があるかどうか疑問に思っています。何かのようなもの:
if (SaveAsNew)
{
myRepository.Add(p);
myRepository.SaveChange();
Request.ClearPostData();
// p.Id is now a new Value.
}
ありがとう