这是我的CreateUnit.cshtml,我将templateId设置为id为'TemplateId'的隐藏输入字段。当我确认对话框时,执行asp.net mvc控制器'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; }
}
答案 0 :(得分:0)
而不是视图中的@Html.HiddenFor(x => x.TemplateId)
,而是使用@Html.EditorFor(x => x.TemplateId)
。 HTML将呈现为隐藏的输入字段。
答案 1 :(得分:0)
代替:
$( '#TemplateId')文本(templateId)。
我写了这个,现在TemplateId以表格发送:)
$( “[名= 'TemplateId']”)VAL(templateId)。
愚蠢的输入字段没有文字......