0

我相信每个人都遇到过这个,但我想无论如何都会问这个。所以这就是我所拥有的 -

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)%> 我想这是预期的行为,但我在这里遗漏了什么吗?

4

1 回答 1

1

好吧,一方面,您的“继承”属性是错误的。代替

<%@ 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用作你的模型。另一方面,您发布的操作方法甚至不可编译,因此很难判断真正的问题可能是什么。

发送这样的复合对象对我来说效果很好,因此您的实现很可能存在问题。

更新

任何持久模型属性的值都必须从编辑器页面回传,这意味着它们需要存储在表单字段中。如果页面生成器没有为这些值创建字段(我不确定它应该 - 包含嵌套对象的部分视图对我来说更有意义),您需要添加可编辑的字段或隐藏。

于 2011-02-03T17:56:54.263 回答