模型容器内的一个视图和多个模型

时间:2011-07-18 00:56:10

标签: c# asp.net-mvc asp.net-mvc-2

大家好,我的方法[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
            }



        }

1 个答案:

答案 0 :(得分:3)

ASP.Net MVC不适用于不可变模型;它没有意识到它只能将属性值作为构造函数参数传递。

您的ModelViewContainer需要无参数构造函数和可写属性。

或者,您可以编写自己的ModelBinder知道如何做到这一点。 (我不推荐这个选项)