2012-11-16 24 views
0

我正在使用ASP.NET MVC 3(APSPxView引擎)。ASP.NET MVC 3.模型包含对象的列表<>,将它传递给视图,但它返回为NULL

我有一个模型(MasterModel),它包含一些属性。其中之一是对象的列表(DetailModels):

public class MasterModel 
{ 
    [DisplayName("Master Name")] 
    public string MasterName { get; set; } 

    [DisplayName("Master Value")] 
    public int? MasterValue { get; set; } 

    public List<DetailModel> Details { get; set; } 
} 

public class DetailModel 
{ 
    [DisplayName("Detail Name")] 
    public string DetailName { get; set; } 

    [DisplayName("Detail Value")] 
    public int? DetailValue { get; set; } 
} 

所以我需要与形式就可以了,我可以填补MasterValue物业的看法,我想为详细信息领域的GridView和填写DetailValues在gridview中。

所以我的控制器方法看起来如此:

public ActionResult MasterDetailsView() 
{ 
    List<DetailModel> details = new List<MasterDetail> 
    { 
     new DetailModel 
     { 
      DetailName = "detail0", 
     }, 
     new DetailModel 
     { 
      DetailName = "detail1", 
     }, 
     new DetailModel 
     { 
      DetailName = "detail2", 
     }, 
    }; 

    MasterModel master = new MasterModel 
    { 
     MasterName = "Master", 
     Details = details 
    }; 

    return View("MasterDetailsView", master); 
} 

[HttpPost] 
public ActionResult MyMasterDetailsViewResponseHandler ([ModelBinder(typeof(DevExpressEditorsBinder))] MasterModel model) 
    { 
     // Some code 
    } 

最后我的看法:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Main.Master" Inherits="System.Web.Mvc.ViewPage<MyApp.Models.MasterModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
<%  
using (Html.BeginForm("MyMasterDetailsViewResponseHandler", "Home", FormMethod.Post)) 
{ 
%> 

<%= Html.LabelFor(m => m.MasterName) %> 
<%= Html.TextBoxFor(m => m.MasterName)%> 
<%= Html.LabelFor(m => m.MasterValue) %> 
<%= Html.TextBoxFor(m => m.MasterValue)%> 

//Some code to add Grid view for Details 

Html.DevExpress().Button(settings => 
{ 
    settings.Name = "btnSubmit"; 
    settings.Width = Unit.Percentage(100); 
    settings.Text = "Submit";  
    settings.UseSubmitBehavior = true; 
}).GetHtml(); 

<%  
} 
%> 
</asp:Content> 

所以,我的第一个和主要问题: 如果我提交的形式,它返回我的模型,其中MasterValue被正确填充,但Details属性为空。即使我没有添加GridView,只是将Details传递给视图并提交表单而没有任何细节变化。无论如何细节无效。你能帮我解决我的问题吗?

第二个问题是如何正确地为GridView创建GridView,以便我可以填充它并通过一次提交按钮单击来提交所有内容?

+0

阅读http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx可能你会发现一些东西找出解决方案 – Rafay

+0

你确定DevExpressEditorsBinder能够绑定复杂的模型吗? DefaultModelBinder是。这完全是关于命名输入。 –

+0

谢谢你的评论。第一条评论中的链接可以帮助我,现在我可以传递数据并将其恢复,并且我明白如何做到这一点。但据我所知,这种方法意味着,我不能做我自己的UserControl,例如GridView,并且网格视图的每一行都是DetailModel,对不对? – Ceridan

回答

0

我看到的第一个问题是你正试图在MVC框架内对webforms进行控制。这不起作用。 (或者如果它工作,应该避免)。 webforms是一个非常独特的html引擎,它紧密集成在其内部。

为MVC中的“web表单”视图引擎是不一样的,与服务器端控件,视图状态,回发Webfroms HTML引擎等

所以没有GridView控件或DetailsView控件控制。你手工建立html模板。没有任何视图状态,所以你想提交给服务器的任何东西都必须在表单上呈现。 (典型的ID为隐藏字段等)

+0

谢谢你的回答。是的,现在我感受到了不同。 Html.EditorFor帮助我了解它如何正常工作。 – Ceridan

相关问题