在asp.net mvc中传递对象内部对象时的行为?
问题描述:
我相信每个人都会遇到这个问题,但我想这会问这个问题。因此,这里是我 -在asp.net mvc中传递对象内部对象时的行为?
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)%>
我想这是预期的行为,但我错过了什么吗?
答
那么,首先,你的“继承”属性是错误的。取而代之的
<%@ 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
为你的模型。另一方面,您发布的操作方法甚至不可编译,因此很难说出真正的问题。
像这样发送复合对象对我来说工作得很好,所以很可能是您的实现问题。
更新
值任何持久模特属性必须被张贴在编辑页面,这意味着它们需要被存储在表单字段后面。如果页面生成器不为这些值创建字段(并且我不确定它应该 - 对于包含嵌套对象的部分视图更有意义),则需要添加可编辑的字段或隐藏。