我将ViewModel(包含“Person”对象)从“EditPerson”控制器操作传递到视图中。从视图发回时,ActionResult接收除ID之外的所有Person属性(它表示为零而不是说它的实数为整数)
谁能告诉我为什么?
控制器看起来像这样:
public ActionResult EditPerson(int personID)
{
var personToEdit = repository.GetPerson(personID);
FormationViewModel vm = new FormationViewModel();
vm.Person = personToEdit;
return View(vm);
}
[HttpPost]
public ActionResult EditPerson(FormationViewModel model) <<Passes in all properties except ID
{
// Persistence code
}
View看起来像这样:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Afp.Models.Formation.FormationViewModel>" %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.Title) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.Title) %>
<%= Html.ValidationMessageFor(model => model.Person.Title) %>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.Forename)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.Forename)%>
<%= Html.ValidationMessageFor(model => model.Person.Forename)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.Surname)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.Surname)%>
<%= Html.ValidationMessageFor(model => model.Person.Surname)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.DOB) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.DOB, String.Format("{0:g}", Model.DOB))
<%= Html.ValidationMessageFor(model => model.DOB) %>
</div>--%>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.Nationality)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.Nationality)%>
<%= Html.ValidationMessageFor(model => model.Person.Nationality)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.Occupation)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.Occupation)%>
<%= Html.ValidationMessageFor(model => model.Person.Occupation)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.CountryOfResidence)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.CountryOfResidence)%>
<%= Html.ValidationMessageFor(model => model.Person.CountryOfResidence)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.PreviousNameForename)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.PreviousNameForename)%>
<%= Html.ValidationMessageFor(model => model.Person.PreviousNameForename)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.PreviousSurname)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.PreviousSurname)%>
<%= Html.ValidationMessageFor(model => model.Person.PreviousSurname)%>
</div>
<div class="editor-label">
<%= Html.LabelFor(model => model.Person.Email)%>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.Person.Email)%>
<%= Html.ValidationMessageFor(model => model.Person.Email)%>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
Person类看起来像:
[MetadataType(typeof(Person_Validation))]
public partial class Person
{
public Person()
{
}
}
[Bind(Exclude = "ID")]
public class Person_Validation
{
public int ID { get; private set; }
public string Title { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public System.DateTime DOB { get; set; }
public string Nationality { get; set; }
public string Occupation { get; set; }
public string CountryOfResidence { get; set; }
public string PreviousNameForename { get; set; }
public string PreviousSurname { get; set; }
public string Email { get; set; }
}
和ViewModel:
public class FormationViewModel
{
public Company Company { get; set; }
public Address RegisteredAddress { get; set; }
public Person Person { get; set; }
public PersonType PersonType { get; set; }
public int CurrentStep { get; set; }
}
}
答案 0 :(得分:1)
未发布ID,因为它不在表单内。您可以将其包含为隐藏字段:
<%= Html.HiddenFor(model => model.Person.ID) %>
答案 1 :(得分:1)
删除
[Bind(Exclude = "ID")]
来自你的模特课。