我正在尝试为重复的类(Offer)设置EditorTemplate - 但是,我无法让EditorTemplate正常工作:
我的ViewModel是:
public class OfferVM
{
public int RoomTypeId { get; set; }
public int PropertyId { get; set; }
public string RoomTypeName { get; set; }
public string Layout { get; set; }
public decimal RoomRate { get; set; }
public string Inclusions { get; set; }
public string Property { get; set; }
public bool IncludeInOffer { get; set; }
}
我的控制器获取代码是:
//
// GET: /Offer/Create
public ActionResult Create()
{
var roomtypes = db.RoomTypes.Include(r => r.Property).ToList();
IList<OfferVM> offerVM = Mapper.Map<IList<RoomType>, IList<OfferVM>>(roomtypes);
return View(offerVM);
}
控制器工作正常 - 我可以在VS中看到它。
我的Create.cshtml代码是:
@model IEnumerable<FGBS.ViewModels.OfferVM>
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.Bootstrap().Begin(new Form().Type(FormType.Horizontal))) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend></legend>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.RoomTypeId)
</th>
<th>
@Html.DisplayNameFor(model => model.PropertyId)
</th>
<th>
@Html.DisplayNameFor(model => model.RoomTypeName)
</th>
<th>
@Html.DisplayNameFor(model => model.Layout)
</th>
<th>
@Html.DisplayNameFor(model => model.RoomRate)
</th>
<th>
@Html.DisplayNameFor(model => model.Inclusions)
</th>
<th>
@Html.DisplayNameFor(model => model.Property)
</th>
<th>
@Html.DisplayNameFor(model => model.IncludeInOffer)
</th>
<th></th>
</tr>
@Html.EditorFor(Model => Model.OfferVM)
</table>
然后在我的Views / Home / EditorTemplates文件夹中,我有我的OfferVM.cshtml文件:
@model FGBS.ViewModels.OfferVM
@{
Layout = null;
}
<tr>
<td>
@Html.EditorFor(model => model.RoomTypeId)
@Html.ValidationMessageFor(model => model.RoomTypeId)
</td>
<td>
@Html.EditorFor(model => model.PropertyId)
@Html.ValidationMessageFor(model => model.PropertyId)
</td>
<td>
@Html.EditorFor(model => model.RoomTypeName)
@Html.ValidationMessageFor(model => model.RoomTypeName)
</td>
<td>
@Html.EditorFor(model => model.Layout)
@Html.ValidationMessageFor(model => model.Layout)
</td>
<td>
@Html.EditorFor(model => model.RoomRate)
@Html.ValidationMessageFor(model => model.RoomRate)
</td>
<td>
@Html.EditorFor(model => model.Inclusions)
@Html.ValidationMessageFor(model => model.Inclusions)
</td>
<td>
@Html.EditorFor(model => model.Property)
@Html.ValidationMessageFor(model => model.Property)
</td>
<td>
@Html.EditorFor(model => model.IncludeInOffer)
@Html.ValidationMessageFor(model => model.IncludeInOffer)
</td>
</tr>
但是,当我运行代码时,我收到错误:
''System.Collections.Generic.IEnumerable'不包含'OfferVM'的定义,并且没有扩展方法'OfferVM'接受类型'System.Collections.Generic.IEnumerable'的第一个参数可以找到(你是吗?)缺少using指令或程序集引用?)'
我确信我错过了一些简单的事情 - 但是如何纠正我的问题会很好。
答案 0 :(得分:1)
行@Html.EditorFor(Model => Model.OfferVM)
错误,因为Model
已经是IEnumeration。您可能在重构时弄乱了ViewModel?我建议为Create.cshtml
设置一个容器ViewModel,因此您有一个类似IEnumerable<FGBS.ViewModels.OfferVM>
类的模型,而不是模型CreateViewModel
,它具有属性Offers
,这是一个IList<OfferVM>
。
您的型号代码:
public class OfferVM
{
....
}
public class CreateViewModel {
public IList<OfferVM> Offers { get; set; }
public OfferVM Header {
get {
return Offers.FirstOrDefault();
}
}
}
您的控制器代码:
var vm = new CreateViewModel();
vm.Offers = Mapper.Map<IList<RoomType>, IList<OfferVM>>(roomtypes);
return View(vm);
您的Create.cshtml以:
开头@model FGBS.ViewModels.CreateViewModel
在你的TH中,你会写出类似的东西:
@Html.DisplayNameFor(x => x.Header.RoomTypeId)
等