2

MVC3で次のことが可能かどうか疑問に思います

基本的に、Ajaxフォームを使用して投稿したい子コレクションを持つViewModelがあります。

モデル

    [Serializable]
    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public int CurrentSalesRep { get; set; }

        public List<SelectListItem> SalesReps { get; set; }
    }

    [Serializable]
    public class CustomerVM
    {
        public List<Customer> Customers { get; set; }
    }

SalesController

        [HttpPost]
        public ActionResult Customers(CustomerVM customer)
        {
            return PartialView(customer);
        }

意見

@model  DropdownSave.Models.CustomerVM

<div>
    @{
        using(Ajax.BeginForm("Customers", "Sales", new AjaxOptions { UpdateTargetId = "gridArea",HttpMethod="Post" })){
        <div id="gridArea">
            <table>
            @foreach (var m in Model.Customers)
            {
                <tr>
                    <td>
                        @Html.TextBoxFor(a => m.FirstName)
                    </td>
                    <td>
                        @Html.TextBoxFor(a => m.LastName)
                    </td>
                </tr>
            }
            </table>                   
            <input type="submit" value="Save" /> 

        </div>
        }
     }
</div>

基本的に、CustomerVmのインスタンスをコントローラーに投稿できますが、子コレクションはnullです。私が試していることは可能ですか?

4

1 に答える 1

2

自分で解決しました:

ビューを次のように更新する必要があるようです

<div>
    @{
        using(Ajax.BeginForm("Customers", "Sales", new AjaxOptions { UpdateTargetId = "gridArea",HttpMethod="Post" })){
        <div id="gridArea">
            <table>
            @for (int i = 0; i < Model.Customers.Count; i++)
            {
                <tr>
                    <td>
                        @Html.LabelFor(m => m.Customers[i].FirstName)
                    </td>
                    <td>
                        @Html.LabelFor(m => m.Customers[i].LastName)
                    </td>
                    <td>
                        @Html.HiddenFor(m => m.Customers[i].CurrentSalesRep)
                    </td>
                    <td>
                        @Html.DropDownListFor(m => m.Customers[i].CurrentSalesRep,Model.Customers[i].SalesReps)
                    </td>
                </tr>
            }
            </table>                   
            <input type="submit" value="Save" /> 

        </div>
        }
     }
</div>

ドロップダウンで選択したアイテムをキャプチャする機能も追加しました

于 2012-04-06T23:08:57.423 に答える