大家好,我的方法[HTTPost]有点麻烦,请看下面的代码:
MODELS(模型Case和Person比这里提供的更多属性)
public class Case
{
public string caseNumber
{
get;
set;
}
}
public class Person
{
public string name
{
get;
set;
}
public string lastName
{
get;
set;
}
}
public class ModelViewContainer {
public Person Person {
get;
private set;
}
public Case Case{
get;
private set;
}
public ModelViewContainer (Person person, Case casep)
{
Persona = persona;
Case = casep;
}
}
在我的控制器中
public ActionResult PresentView() {
return View(new ModelViewContainer(new Person(),new Case()));
}
[HttpPost]
public ActionResult PresentView(ModelViewContainer model) **<--never enters here**
{
if (ModelState.IsValid){
....
}
else
return View(model);
}
查看
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.ModelViewContainer>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
Name
<%: Html.TextBoxFor(model => model.Persona.nombre)%>
<%: Html.ValidationMessageFor(model => model.Persona.nombre)%>
LastName
<%: Html.TextBoxFor(model => model.Persona.apellido)%>
<%: Html.ValidationMessageFor(model => model.Persona.apellido)%>
Case Number
<%: Html.TextBoxFor(model => model.Case.caseNumber)%>
<%: Html.ValidationMessageFor(model => model.Case.caseNumber)%>
<p>
<input type="submit" value="Create" />
</p>
<% } %>
</asp:Content>
结果错误是:System.MissingMethodException:没有为此对象定义的参数构造函数。
是否可以在httpost中捕获模型?如果没有,我该怎么办? (对不起,请帮帮我。
编辑 - 更正
public class ModelViewContainer {
public Person Person {
get;
set; //not private
}
public Case Case{
get;
set; //not private
}
public ModelViewContainer (Person person, Case casep)
{
Persona = persona;
Case = casep;
}
public ModelViewContainer (){ //add parammeter less constructor
}
}
答案 0 :(得分:3)
ASP.Net MVC不适用于不可变模型;它没有意识到它只能将属性值作为构造函数参数传递。
您的ModelViewContainer
需要无参数构造函数和可写属性。
或者,您可以编写自己的ModelBinder
知道如何做到这一点。 (我不推荐这个选项)