2012-11-16 28 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

相關問題