0

这是我的 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; }
    }
4

2 回答 2

0

代替:

$('#TemplateId').text(templateId);

我写了这个,现在 TemplateId 与表单一起发送:)

$("[name='TemplateId']").val(templateId);

对我来说很愚蠢,输入字段没有文字...

于 2012-09-29T15:46:59.700 回答
0

而不是@Html.HiddenFor(x => x.TemplateId)在您看来,@Html.EditorFor(x => x.TemplateId)而是使用。HTML 将呈现为隐藏的输入字段。

于 2012-09-27T22:19:55.613 回答