jquery对话框中隐藏字段的值不会传递给asp.net mvc控制器操作

时间:2012-09-27 21:39:47

标签: asp.net-mvc

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

代替:

$( '#TemplateId')文本(templateId)。

我写了这个,现在TemplateId以表格发送:)

$( “[名= 'TemplateId']”)VAL(templateId)。

愚蠢的输入字段没有文字......