微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在MVC3中为复杂类型使用editortemplates?

如何解决如何在MVC3中为复杂类型使用editortemplates?

| 我有两个班,增值税和产品。产品具有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
    )
如果有人可以阐明这一点,或者甚至指向我在网上某个地方的一个很好的例子,我将不胜感激。我已经坚持了好几天了。     

解决方法

        我将使用强类型视图和视图模型,因为它使事情比使用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,\"Description\")
)
然后,只要您在某处拥有类型为
VatRateViewModel
的属性,就可以简单地:
@Html.EditorFor(x => x.SomePropertyOfTypeVatRateViewModel)
这将呈现相应的编辑器模板。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。