您可以在asp.net mvc中将复杂对象从表单发布到控制器吗

Posted

技术标签:

【中文标题】您可以在asp.net mvc中将复杂对象从表单发布到控制器吗【英文标题】:can you post complex objects from form to controller in asp.net mvc 【发布时间】:2010-12-25 12:23:05 【问题描述】:

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

【问题讨论】:

顺便说一句@oo,我认为您的对象显示为空,因为您可能不会将子对象公开。当我在一分钟前运行一些测试并且故意将子对象设置为私有时遇到了同样的问题。这可以解释你的 null 值。 【参考方案1】:

如果我理解你的问题,我想你可以。

在我的字段名称中,我不仅输入了属性名称,还输入了对象。

因此,如果我有一个“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);
        

剪辑

<%@ 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>

【讨论】:

我认为您理解我的问题,但这似乎不起作用。复杂对象总是显示为 null 。 . 是的,我认为反对票有点奇怪。谢谢@Jay。 +1 甚至没有意识到你可以做到这一点,不敢相信我已经错过了几个月的开发。这是 MVC2 功能还是在原始 MVC1 版本中? MVC 1。我还没接触过 MVC 2。是的,我知道。 :) 同意。 .我真的想通了。 .我在子对象上没有 get;set; 。 .太傻了。 .【参考方案2】:

我遇到了同样的问题,我发现了一个类似的问题,帮助很多人解决了这个问题:Complex object and model binder ASP.NET MVC,但它并没有解决我的问题。

我意识到问题是因为我的输入被禁用(我在文档就绪时使用 JQuery 禁用它们),您可以在此处看到它:How do I submit disabled input in ASP.NET MVC?。最后我使用了只读属性而不是禁用属性。

【讨论】:

以上是关于您可以在asp.net mvc中将复杂对象从表单发布到控制器吗的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 中将条带支付与自定义表单集成? [关闭]

如何在 ASP.Net MVC 中将列表对象显示到视图中?

无法在 asp.net mvc 4 中将 JSON 对象映射到 JqGrid

在 ASP.net MVC 4 中将类对象从一个控制器动作传递到不同的控制器动作

如何在asp.net mvc中返回复杂的Json对象

复杂对象和模型绑定器 ASP.NET MVC