Один вид и множество моделей внутри контейнера модели - PullRequest
2 голосов
/ 18 июля 2011

Здравствуйте, ребята. У меня небольшая проблема с моим методом [HTTPost], посмотрите мой код ниже:

МОДЕЛИ (модели 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: для этого объекта не определен конструктор без параметров.

Isможно ли запечатлеть модель в 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 Ответ

3 голосов
/ 18 июля 2011

ASP.Net MVC не работает с неизменяемыми моделями;он не понимает, что может просто передавать значения свойств в качестве параметров конструктора.

Вашему ModelViewContainer нужен конструктор без параметров и доступные для записи свойства.

В качестве альтернативы, вы можете написать свойModelBinder это знает, как это сделать.(Я не рекомендую эту опцию)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...