我不知道为什么,模型没有绑定到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”,为什么会这样?
由于
答案 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>
}