在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为你的模型。另一方面,您发布的操作方法甚至不可编译,因此很难说出真正的问题。

像这样发送复合对象对我来说工作得很好,所以很可能是您的实现问题。

更新

值任何持久模特属性必须被张贴在编辑页面,这意味着它们需要被存储在表单字段后面。如果页面生成器不为这些值创建字段(并且我不确定它应该 - 对于包含嵌套对象的部分视图更有意义),则需要添加可编辑的字段或隐藏。