Поведение при передаче объектов внутри объектов в asp.net mvc? - PullRequest
0 голосов
/ 03 февраля 2011

Я уверен, что все сталкивались с этим, но я подумал, что все равно спросит.Итак, вот что у меня есть -

public class ABC
{
  public int x;
  public int y;
  public XYZ obj;
}
public class XYZ
{
 int x1;
 int y1;
}
public ActionResult Test1()
{
  ABC model= new ABC();
  model.x=1;
  model.y=2;
  ABC.obj= new XYZ();
  model.x1=12;
  obj.y2=34;
  return View(model);
}
[HttpPost]
public ActionResult Test1(ABC model)
{
 //does not get XYZ obj
}
View- 
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Models.ABC>" %>
   <% using (Html.BeginForm())
   {%>
    //stuff here
        <%:Html.HiddenFor(model => model.obj)%>
   <%}%>

Если я сделаю скрытые поля явно для полей XYZ x1 и y1, я получу эти значения.Вот так - <%:Html.Hidden("Model.obj.x1",Model.obj.x1)%> Полагаю, это ожидаемое поведение, но я что-то здесь упускаю?

1 Ответ

1 голос
/ 03 февраля 2011

Ну, во-первых, ваш атрибут "наследует" неверен. Вместо

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="Models.ABC" %>

должно быть

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<Models.ABC>" %>

Если вы хотите использовать Models.ABC в качестве модели. С другой стороны, опубликованные вами методы действий даже не компилируются, поэтому трудно сказать, в чем может быть настоящая проблема.

Отправка составных объектов, как это, прекрасно работает для меня, так что, скорее всего, проблема с вашей реализацией.

Обновление

Значения для любых сохраняемых свойств модели должны отправляться обратно со страницы редактора, что означает, что они должны храниться в полях формы. Если генератор страниц не создает поля для этих значений (и я не уверен, что это следует - для меня было бы более целесообразно включить частичное представление для вложенных объектов), вам необходимо добавить поля, которые можно редактировать или скрытый.

...