0

ドロップダウン ボックスにクライアントのリストを含めようとしています。このリストをフォーム (Html.BeginForm()) に含めて、選択した値を POST コントローラーに渡すことができるようにします。何かが足りないと思います。次のクラスがあります。

私の請求書ビューモデル:

public class InvoiceViewModel
{
    public InvoiceViewModel()
    {
        // makes sure InvoiceItems is not null after construction
        InvoiceItems = new List<PrelimInvoice>();
    }
    public List<PrelimInvoice> InvoiceItems { get; set; }
    public List<Client> ClientId { get; set; }
    public Client Client { get; set; }
    public decimal InvoiceTotal { get; set; }
}

私のクライアントモデル:

public class Client
{
    public string ClientId { get; set; }
    public string Name { get; set; }
}

私の SaveInvoice メソッド:

public ActionResult SaveInvoice()
        {
            var invoice = new Invoice();
            TryUpdateModel(invoice);
            try
            {
                    invoice.ClientId = User.Identity.Name;
                    invoice.DateCreated = DateTime.Now;
                    //Save invoice
                    proent.Invoices.Add(invoice);
                    proent.SaveChanges();
                    //Process the invoice
                    var preliminvoice = InvoiceLogic.GetInvoice(this.HttpContext);
                    preliminvoice.CreateInvoice(invoice);

                    return RedirectToAction("Complete", new { id = invoice.InvoiceId });
            }
            catch
            {
                //Invalid - redisplay with errors
                return View(invoice);
            }
        }

そして、私の Index.cshtml は InvoiceViewModel クラスに強く型付けされています。Index.cshtml は、フォームを生成する場所です。

Html.DropDownList を作成するためのコードと、リストまたはクライアントの何かを含める必要があるかどうかはわかりません。他の場所にドロップダウンリストがありますが、ビューモデルではなくモデルに強く型付けされているため、混乱しています。

誰でも私を助けることができますか?

4

1 に答える 1

1

ViewModel に次の 2 つのプロパティを追加することから始めます。

  1. SelectedClientId: 選択した値を格納します
  2. ClientItems: ドロップダウンに入力する SelectListItems のコレクションを格納します。

例えば

public class ClientViewModel
{
    public List<Client> Clients;

    public int SelectedClientId { get; set; } // from point 1 above
    public IEnumerable<SelectListItem> ClientItems // point 2 above
    {
        get { return new SelectList(Clients, "Id", "Name");}
    }
}

次に、ビュー index.cshtml に次を追加します。

@model ClientViewModel

@Html.DropDownListFor(m => m.SelectedClientId, Model.ClientItems)
于 2013-05-06T16:48:27.463 に答える