2

我不知道为什么,模型没有绑定到创建操作:

视图模型:

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”,为什么会发生这种情况?

谢谢

4

2 回答 2

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));
    }
于 2013-01-23T16:11:04.520 回答
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>
}
于 2013-01-23T12:57:24.913 回答