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

本文关键字:模型 一个 视图 | 更新日期: 2023-09-27 18:02:37

大家好,我有一个小麻烦与我的方法[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;
            }
        }

IN MY CONTROLLER

        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
            }

        }

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

Net MVC不能与不可变模型一起工作;它没有意识到它可以将属性值作为构造函数参数传递。

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

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