フォームが編集モードの場合、コントローラーで評価する「デフォルト」値を使用して、フィールドを非表示のプロパティにします。フォームにプロパティをまったく表示せずに必要な場合は、「ModeState.IsValid」を使用せずに独自の検証を行う必要があります。
非表示になっているプロパティの例:
コントローラ
public ActionResult Index() {
return View();
}
public ActionResult Edit(string id) {
return View((string.IsNullOrEmpty(id)) ? new Test { a = "new" } : FakeRepository.Data(id));
}
[HttpPost]
public ActionResult Edit(Test model) {
if (ModelState.IsValid) {
if (model.a == "new") {
//Create a new record
} else {
//Update Record
}
return RedirectToAction("Index");
}
return View(model);
}
public static class FakeRepository {
public static Test Data(string a) {
return new Test {
a = a,
b = "B",
c = "C"
};
}
}
実在物
public class Test {
[Key]
[Display(Name="A Property")]
public string a { get; set; }
[Required]
[Display(Name = "C Property")]
public string c { get; set; }
[Display(Name = "B Property")]
public string b { get; set; }
}
意見
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Test</legend>
@Html.HiddenFor(model => model.a)
@if (Model.a != "new") {
@Html.HiddenFor(model => model.c)
} else {
<div class="editor-label">
@Html.LabelFor(model => model.c)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.c)
@Html.ValidationMessageFor(model => model.c)
</div>
}
<div class="editor-label">
@Html.LabelFor(model => model.b)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.b)
@Html.ValidationMessageFor(model => model.b)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
今:
.../編集/何かが「C」を非表示にします
.../編集/「C」が表示されます