模型不绑定到Action传递Null作为值

时间:2013-01-23 12:53:45

标签: c# asp.net-mvc razor

我不知道为什么,模型没有绑定到Create Action:

视图模型:

public class AddressContactViewModel
{
    // Primary properties
    public int Id { get; set; }
    public string Contact { get; set; }

    // Navigation properties

    [Display(ResourceType = typeof(HeelpResources), Name = "AddressContactViewModelNameLabel")]
    [Required(ErrorMessageResourceName = "ErrorMsgRequiredField", ErrorMessageResourceType = typeof(HeelpResources))]
    public int ContactType_Id { get; set; }

    public int Address_Id { get; set; }

    // ViewModel dropdownlists
    public IEnumerable<SelectListItem> ContactTypeList { get; set; }
}

查看:

@model Heelp.ViewModels.AddressContactViewModel

@using (Html.BeginForm()) {

    @Html.AntiForgeryToken()

    @Html.HiddenFor(m => m.Address_Id)

    <fieldset>
        <legend>AddressContactViewModel</legend>

       <div id="year">
        @Html.DisplayNameFor(m => m.ContactType_Id)
        @Html.DropDownListFor(m => m.ContactType_Id, Model.ContactTypeList, HeelpResources.AddressContactViewModelContactTypesListDropDownFirstRecord)
        @Html.ValidationMessageFor(m => m.ContactType_Id)
    </div>
    <div class="editor-label">
        @Html.LabelFor(m => m.Contact)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(m => m.Contact)
        @Html.ValidationMessageFor(m => m.Contact)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

行动职位:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public virtual ActionResult ContactCreate(AddressContactViewModel contact)
    {
        var contactDto = Mapper.Map<AddressContactViewModel, AddressContactDto>(contact);

        _addressContactService.Create(contactDto);

        return RedirectToAction(MVC.Address.ContactList());
    }

编辑:获取:

    public virtual ActionResult ContactCreate(int addressId)
    {
        var model = new AddressContactViewModel
            {
                Address_Id = addressId,
                ContactTypeList = ContactTypeDropDownList()
            };

        return View(model);
    }

当我提交表格时,我在ContactCreate行动的联系参数中收到“null”,为什么会这样?

由于

2 个答案:

答案 0 :(得分:3)

令人难以置信,我发现了问题,该操作的参数与ViewModel中的一个字段具有相同的名称,参数名称的更改以及一切正常工作:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public virtual ActionResult ContactCreate(AddressContactViewModel addressContact) // HERE I CHANGE FROM contact TO addressContact AND THE PROBLEM GET SOLVED
    {
        var contactDto = Mapper.Map<AddressContactViewModel, AddressContactDto>(addressContact);

        _addressContactService.Create(contactDto);

        return RedirectToAction(MVC.Address.ContactList(addressContact.Address_Id));
    }

答案 1 :(得分:0)

我在上一个应用中遇到了同样的问题。尝试将按钮和要提交的字段包含在同一个div中:

@model Heelp.ViewModels.AddressContactViewModel

@using (Html.BeginForm()) {

@Html.AntiForgeryToken()

@Html.HiddenFor(m => m.Address_Id)

<fieldset>
    <legend>AddressContactViewModel</legend>

   <div id="year">
    @Html.DisplayNameFor(m => m.ContactType_Id)
    @Html.DropDownListFor(m => m.ContactType_Id, Model.ContactTypeList, HeelpResources.AddressContactViewModelContactTypesListDropDownFirstRecord)
    @Html.ValidationMessageFor(m => m.ContactType_Id)
</div>
<div class="editor-label">
    @Html.LabelFor(m => m.Contact)
</div>
<div class="editor-field">
    @Html.TextBoxFor(m => m.Contact)
    @Html.ValidationMessageFor(m => m.Contact)
    <input type="submit" value="Create" />
</div>
</fieldset>
}