6

付加価値税と製品の2つのクラスがあります。製品にはIVatのプロパティがあります。製品を作成/編集するときに、MVCのエディターテンプレートを使用して、すべてのVatオブジェクトのドロップダウンリストを表示しようとしています。私の愛する人生のために、私はこれを機能させることができません。

ドロップダウンを表示する次のコードがありますが、フォームが送信されたときに製品の付加価値税が設定されません。

コントローラ:

IList<IVatRate> vatRates = SqlDataRepository.VatRates.Data.GetAllResults();
ViewBag.VatRates = new SelectList(vatRates, "Id", "Description");

Add.cshtml

@Html.EditorFor(model => model.VatRate.Id, "VatSelector", (SelectList)ViewBag.VatRates)

VatSelector.cshtml

@model SelectList
@Html.DropDownList(
        String.Empty /* */,
            (SelectList)ViewBag.Suppliers, 
        Model
    )

誰かがこれに光を当てたり、どこかのウェブ上の良い例を教えてくれたらありがたいです...私はこれにかなりの数日間立ち往生しています。

4

1 に答える 1

7

ViewBagよりもはるかに簡単になるので、強く型付けされたビューとビューモデルを使用します。

したがって、ビューモデルから始めます。

public class VatRateViewModel
{
    public string SelectedVatRateId { get; set; }
    public IEnumerable<IVatRate> Rates { get; set; }
}

次にコントローラー:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new VatRateViewModel
        {
            Rates = SqlDataRepository.VatRates.Data.GetAllResults()
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(VatRateViewModel model)
    {
        // model.SelectedVatRateId will contain the selected vat rate id
        ...
    }
}

意見:

@model VatRateViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
        x => x.SelectedVatRateId,
        new SelectList(Model.Rates, "Id", "Description")
    )
    <input type="submit" value="OK" />
}

また、VatRateViewModelのエディターテンプレートを使用する場合は、次の場所で定義できます~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml

@model VatRateViewModel
@Html.DropDownListFor(
    x => x.SelectedVatRateId,
    new SelectList(Model.Rates, "Id", "Description")
)

そして、どこかにタイプのプロパティがあるときはいつでも、次のようにするVatRateViewModelことができます。

@Html.EditorFor(x => x.SomePropertyOfTypeVatRateViewModel)

対応するエディターテンプレートをレンダリングします。

于 2011-06-12T20:27:58.583 に答える