Pie*_*ter 6 editortemplates asp.net-mvc-3
我有两个班,Vat和Product.产品具有IVat属性.我正在尝试使用MVC中的编辑器模板在创建/编辑产品时显示所有Vat对象的下拉列表.对于我亲爱的生活,我无法做到这一点.
我有以下代码显示下拉列表但是在提交表单时它没有为产品设置Vat.
控制器:
IList<IVatRate> vatRates = SqlDataRepository.VatRates.Data.GetAllResults();
ViewBag.VatRates = new SelectList(vatRates, "Id", "Description");
Run Code Online (Sandbox Code Playgroud)
Add.cshtml
@Html.EditorFor(model => model.VatRate.Id, "VatSelector", (SelectList)ViewBag.VatRates)
Run Code Online (Sandbox Code Playgroud)
VatSelector.cshtml
@model SelectList
@Html.DropDownList(
String.Empty /* */,
(SelectList)ViewBag.Suppliers,
Model
)
Run Code Online (Sandbox Code Playgroud)
如果有人能够对此有所了解,或者甚至在网上向我指出一个很好的例子,我将不胜感激......我已经坚持了好几天了.
我会使用强类型视图和视图模型,因为它使事情变得比ViewBag更容易.
所以从视图模型开始:
public class VatRateViewModel
{
public string SelectedVatRateId { get; set; }
public IEnumerable<IVatRate> Rates { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后一个控制器:
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
...
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
@model VatRateViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(
x => x.SelectedVatRateId,
new SelectList(Model.Rates, "Id", "Description")
)
<input type="submit" value="OK" />
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用VatRateViewModel的编辑器模板,您可以在~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml以下位置定义:
@model VatRateViewModel
@Html.DropDownListFor(
x => x.SelectedVatRateId,
new SelectList(Model.Rates, "Id", "Description")
)
Run Code Online (Sandbox Code Playgroud)
然后,无论何时某个地方你都有类型的财产,VatRateViewModel你可以简单地:
@Html.EditorFor(x => x.SomePropertyOfTypeVatRateViewModel)
Run Code Online (Sandbox Code Playgroud)
这将呈现相应的编辑器模板.
| 归档时间: |
|
| 查看次数: |
3851 次 |
| 最近记录: |