你能在asp.net mvc中将复杂的对象从窗体发布到控制器吗?

时间:2009-12-11 01:53:36

标签: asp.net-mvc data-binding forms post

我看到有使用不同模型绑定器的解决方案,比如castl但我不知道当我将表单发布到控制器时,基本默认模型绑定器是否支持嵌套复杂对象。

2 个答案:

答案 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?。最后,我使用只读而不是禁用属性。