0

我正在使用 ASP.NET MVC 3(APSPxView 引擎)。

我有一个包含一些属性的模型(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 属性,并且我想为 Details 字段创建一个 GridView 并在 gridview 中填充 DetailValues。

所以我的控制器方法看起来是这样的:

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 传递给视图并提交回表单,而无需更改任何 Details。无论如何,详细信息为空。你能帮我解决我的问题吗?

第二个问题是如何为详细信息正确制作 GridView,我可以在其中填写并通过单击提交按钮提交所有内容?

4

1 回答 1

0

我看到的第一个问题是您正在尝试在 MVC 框架内创建 webforms 控件。这不起作用。(或者如果它确实有效,应该避免它)。webforms 是一个非常独特的 html 引擎,它自身紧密集成。

MVC 的“webforms”视图引擎与具有服务器端控件、视图状态、回发等的 Webfroms html 引擎不同。

所以没有 GridView 或 DetailsView 控件。您手动构建 html 模板。没有任何视图状态,因此您要提交给服务器的任何内容都必须呈现在表单上。(通常 ids 作为隐藏字段等)

于 2012-11-16T15:56:01.867 回答