0

ASP.NET MVC 3 (APSPxView Engine) を使用しています。

いくつかのプロパティを含むモデル (MasterModel) があります。それらの 1 つは、オブジェクト (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 を入力したいと考えています。

したがって、私のコントローラーメソッドは次のようになります。

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 プロパティは null です。GridView を追加しなかった場合でも、詳細をビューに渡し、詳細を変更せずにフォームを送信するだけです。とにかく詳細はnullです。私の問題を解決するのを手伝ってくれませんか?

2番目の質問は、送信ボタンを1回クリックするだけで入力してすべてを送信できる詳細に対してGridViewを正しく作成する方法です。

4

1 に答える 1

0

私が最初に目にする問題は、MVCフレームワーク内でコントロールをWebフォーム化しようとしていることです。これは機能しません。(またはそれが機能する場合は、避ける必要があります)。webformsは、それ自体に緊密に統合された非常にユニークなhtmlエンジンです。

MVCの「webforms」ビューエンジンは、サーバー側のコントロール、ビューステート、ポストバックなどを備えたWebfromshtmlエンジンと同じではありません。

したがって、GridViewまたはDetailsViewコントロールはありません。手作業でhtmlテンプレートを作成します。ビューステートがないため、サーバーに送信するものはすべてフォームにレンダリングする必要があります。(通常、非表示フィールドとしてのIDなど)

于 2012-11-16T15:56:01.867 に答える