我看到有使用不同模型绑定器的解决方案,比如castl但我不知道当我将表单发布到控制器时,基本默认模型绑定器是否支持嵌套复杂对象。
答案 0 :(得分:2)
如果我理解你的问题,我想你可以。
在我的字段名称中,我不仅放置了属性名称,还放置了对象。
因此,如果我有一个“Person”对象,其中包含一个包含“State”字段的“Address”对象,我将其名称为“Person.Address.State”,这似乎在我的控制器中解决得很好。
<%= Html.TextBox("Person.Address.State", Person.Address.State....
这是你要问的吗?
修改强>
它确实有效,这是让它工作的代码。
namespace DoMyWork.Controllers
{
public class test
{
public string value { get; set; }
}
public class testParent
{
public test test { get; set; }
}
public class SearchController : Controller
{
public ActionResult ViewUserControl1(testParent test)
{
UpdateModel(test);
return View(test);
}
SNIP
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<DoMyWork.Controllers.testParent>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
ViewUserControl1
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>ViewUserControl1</h2>
<% using( Html.BeginForm()){ %>
<%= Html.TextBox("test.value", Model.test.value) %>
<input type="submit" value="sdf" />
<%} %>
</asp:Content>
答案 1 :(得分:0)
我有同样的问题,我发现了一个类似的问题,帮助很多人解决了这个问题:Complex object and model binder ASP.NET MVC,但它没有解决我的问题。
我意识到问题是由于我的输入被禁用(我在文档就绪时使用JQuery禁用它们)引起的,你可以在这里看到它:How do I submit disabled input in ASP.NET MVC?。最后,我使用只读而不是禁用属性。