-1

Model を使用してリストを埋める dropDownlist を持つフォームがあり、ビューがレンダリングされます。問題は、送信ボタンを押すと、モデルの null ポインター例外がスローされることです。Post Action で選択した値を受け取りたいです。

これが私のコードです:

モデル:

public class BillViewModel
{
    public List<SelectListItem> ClientList { get; set; }
    public int SelectedClient { get; set; }
}

コントローラ:

public ActionResult Index()
{
    var billRepo = new BillRepo();
    var bill = new BillViewModel {ListProducts = billRepo.GetAllProducts()};
    bill.ClientList = new List<SelectListItem>();
    List<Client> allClientList = billRepo.GetAllClients();

    foreach (Client client in allClientList)
    {
        var item = new SelectListItem() { Value = client.ClientId.ToString(), Text = client.Name };
        bill.ClientList.Add(item);
    }

    ViewBag.ClientSelect = new SelectList(billRepo.GetAllClients(), "value", "text", bill.SelectedClient);

    bill.SelectedClient = 1;
    return View(bill);
}


[HttpPost]
public ActionResult Index(BillViewModel billViewModel)
{
     return View();
}

ビュー: モデル

@using (Html.BeginForm())
{
     @Html.DropDownListFor(item => item.SelectedClient, Model.ClientList, "Select Client")
     <input type="submit" value="Aceptar"/>
}
4

1 に答える 1

3

POST アクションでは、GET アクションと同じ Index ビューを返しています。ただし、このビューにモデルを渡していません。それがNREを取得している理由です。ビューはドロップダウンをレンダリングする必要があり、GET アクションで行ったのと同じ方法で、その値を入力する必要があります。

[HttpPost]
public ActionResult Index(BillViewModel billViewModel)
{
    bill.ClientList = billRepo
        .GetAllClients()
        .ToList()
        .Select(x => new SelectListItem
        {
            Value = client.ClientId.ToString(), 
            Text = client.Name
        })
        .ToList();

    return View(billViewModel);
}

ビュー モデルがビューに渡される方法と、ClientListプロパティ (ドロップダウンがバインドされている) が値でファイルされる方法に注意してください。

于 2013-07-11T20:20:39.403 に答える