これは私のCreateUnit.cshtmlで、templateIdをID'TemplateId'の非表示の入力フィールドに設定します。ダイアログを確認すると、asp.netmvcコントローラー'UnitController'とそのアクションメソッド'Create'が実行され、UnitViewModelを渡す必要があります。UnitViewModel内で、モデルバインダーはnameプロパティを入力した値に設定しました。ただし、非表示フィールドのtemplateIdがありません。
なぜこれ?
@model ITMS.Web.Models.UnitViewModel
@*Remote Validation*@
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
var templateId = $('#MyDialog').data('templateIdKey');
$('#TemplateId').text(templateId);
});
</script>
@using (Html.BeginForm("Create", "Unit"))
{
@Html.ValidationSummary(false)
<p class="editor-label">@Html.LabelFor(model => model.Name)</p>
<p class="editor-field">@Html.EditorFor(model => model.Name)</p>
<p class="editor-field">@Html.ValidationMessageFor(model => model.Name)</p>
@Html.HiddenFor(x => x.TemplateId)
}
[HttpPost]
public ActionResult Create(UnitViewModel unitViewModel)
{
if (ModelState.IsValid && !_dataProvider.UnitExists(unitViewModel.Name, unitViewModel.TemplateId))
{
Unit unit = Mapper.Map<UnitViewModel, Unit>(unitViewModel);
_dataProvider.AddUnit(unit);
return new JsonNetResult(new { success = true });
}
ModelState.AddModelError("Name", "This name already exists.");
return PartialView(unitViewModel);
}
public class UnitViewModel
{
[Required(ErrorMessage = "Name must not be empty.")]
[StringLength(30, ErrorMessage = "Enter max. 30 chars for a name.")]
[Remote("UnitExists", "Unit", ErrorMessage = "This name already exists.",AdditionalFields="TemplateId")]
[JsonProperty("title")]
public string Name { get; set; }
public Nullable<int> ParentId { get; set; }
[HiddenInput(DisplayValue = false)]
public int TemplateId { get; set; }
}