0

mvc3 で Web アプリケーションを作成し、2 つのドロップダウンリストをコントロールする 2 つの部分ビューを作成しました。2番目には、データベースからのデータを表示するwebgridがあります。

    partialview1.cshtml
    @model Mapping.Models.SecurityIdentifierMapping

    @using (Html.BeginForm("Mapping", "Home"))
    {
        @Html.DropDownList("SecurityID", Model.PricingSecurityID, "-- Select SecurityID --")
        <br />    
        @Html.DropDownList("CUSIPID", Model.PricingSecurityID, "-- Select CUSIPID --")
        <br />
        <button type="submit">Map</button>
    }

    partialview2.cshtml
    @model IEnumerable<Mapping.Models.SecurityIdentifierMapping>

    @{
        ViewBag.Title = "Mapping";
        WebGrid grid = null;
        if (Model.Count() > 0 ){
        grid = new WebGrid(source: Model,
                                defaultSort: "Id",
                                canPage: true,
                                canSort: true,
                                rowsPerPage:20);
        }
    }


    <h2>Mapping</h2>


    @if (grid != null)
    {
    @grid.GetHtml(
                    tableStyle: "grid",
                    headerStyle: "head",
                    alternatingRowStyle: "alt",
                    columns: grid.Columns(
                                                grid.Column("", header: null, format: @<text>@Html.ActionLink("Edit", "Edit", new { id = (int)item.id })  @Html.ActionLink("Delete", "Delete", new { id = (int)item.id })</text>),
                                                grid.Column("PricingSecurityID"),
                                                grid.Column("CUSIP")
                                              )

                    )
    }
    <br />
    <p>
        @Html.ActionLink("Back", "Index")
    </p>

    in index.cshtml


    <div>
    @Html.Partial("_ControlsPartial",)
    </div>

    <div>
    @Html.Partial("_WebGridPartial")
    </div>

inside Indexcontroller.cs in Index()

     public ActionResult Index()
            {
//FOR POPULATE DROPDOWN
                //SecurityIdentifierMapping objModel = new SecurityIdentifierMapping();
                //objModel.PricingSecurityID = objRepository.GetPricingSecurityID();
                //objModel.CUSIP = objRepository.GetCUSIP();
                //return View(objModel);

              //FOR  DISPLAY DATA IN WEBGRID
                return View(dbContext.SecurityIdentifierMappings);
            }

ここに 問題がwebgrid partial viewあります@model IEnumerable<Mapping.Models.SecurityIdentifierMapping>controlpartilview@model Mapping.Models.SecurityIdentifierMapping

両方のモデルを持つ新しいクラスを VIEWMODEL.cs で作成するにはどうすればよいですか? また、INDEX(() にそれを書き込むにはどうすればよいですか?

4

1 に答える 1

3

次の 2 つのプロパティを含むカスタム ビュー モデル クラスを作成してみませんか。

public class SecurityIdentifierMappingViewModel
{
    public IEnumerable<SecurityIdentifierMapping> MappingList {get; set; }
    public SecurityIdentifierMapping Mapping {get; set; }
}

次に、このカスタム ビュー モデルを Index ビューに渡し、対応するプロパティを各パーシャルのビュー モデルとして渡すことができます。

編集

Index アクションは次のようになります。

public ActionResult Index()
{
    // single mapping
    var mapping = new SecurityIdentifierMapping();
    maping.PricingSecurityID = objRepository.GetPricingSecurityID();
    mapping.CUSIP = objRepository.GetCUSIP();

    var viewModel = new SecurityIdentifierMappingViewModel
    {
        Mapping = mapping,
        MappingList = dbContext.SecurityIdentifierMappings.ToList()
    };

    return View(viewModel);
}

そしてでIndex.cshtml

@model SecurityIdentifierMappingViewModel

<div>
    @Html.Partial("_ControlsPartial", Model.Mapping)
</div>

<div>
    @Html.Partial("_WebGridPartial", Model.MappingList)
</div>
于 2012-04-13T07:06:15.053 に答える