複雑なタイプにMVC3の編集を使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/6324102

  •  27-10-2019
  •  | 
  •  

質問

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

ドロップダウンを表示する次のコードがありますが、フォームが送信されたときに製品の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
    )

誰かがこれに光を当てたり、どこかでウェブ上の良い例を教えてくれたら感謝します...私はこれにかなりの間、これに固執しています。

役に立ちましたか?

解決

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)

対応するエディターテンプレートがレンダリングされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top