我几乎已经开始工作了,但我缺少一点微小的知识来完成这项工作,这是一个我知道的快速解决方案。
我将两个ViewModel放入一个视图中:
public class MajorViewModel
{
public ICollection<Major> Majors { get; set; }
}
public class MinorViewModel
{
public ICollection<Minor> Minors { get; set; }
}
进入这样的视图:
<snip>
@Html.Partial("_MajorPartial")
@Html.Partial("_MinorPartial")
<snip>
谁的观点如下:
// _MajorPartial
@using Microsoft.AspNet.Identity
@model ClassPlannerMVC.ViewModels.MajorViewModel
@using (Html.BeginForm())
{
//@Html.EditorFor(m => m.Majors) ?? I'm not able to use this here
}
// _MinorPartial
looks the same except "Major" is changed to "Minor"
然后我在Views / Shared / EditorTemplates / Major.cshtml和Minor.cshtml中有两个视图
// Major.csthml
@model ClassPlannerMVC.Models.Major
@Html.HiddenFor(m => m.ID)
<div class="form-group">
@Html.LabelFor(m => m.Name, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.EditorFor(m => m.Name, new { @class = "form-control" })
</div>
</div>
// Minor.cshtml
looks the same except "Major" is changed to "Minor"
我的两个模特是:
public class Major
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<UserHasMajor> UserHasMajors { get; set; }
}
public class Minor
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<UserHasMinor> UserHasMinors { get; set; }
}
目前视图没有显示我的视图模型(MajorViewModel,MinorViewModel),它们将分别显示Major和Minor的编辑器。我知道我可能会将错误传递给_MajorPartial和_MinorPartial视图,这就是为什么我不能添加一个@ Html.EditorFor(x =&gt; x.Majors)来显示我的自定义编辑器模板。我的代码中有一些非常小的遗漏,您是否发现了我遇到的错误?
如果有必要,我会上传更多代码。
答案 0 :(得分:1)
您似乎没有将任何内容传递给您的@Partial()方法(即模型为空)。我建议你创建另一个视图模型来保存它们并传递主视图,比如
public class CombinedViewModel
{
public MajorViewModel MajorVM { get; set; }
public MinorViewModel MinorVM { get; set; }
}
在[HttpGet]方法中,填充视图模型并传递到主视图
public ActionResult Details()
{
CombinedViewModel model = new CombinedViewModel();
// set properties
model.MajorVM = new MajorVM();
model.MajorVM.Majors = // assign your collection
..
return View(model);
}
然后在主视图中
@model YourAssembly.CombinedViewModel
...
@Html.Partial("_MajorPartial", Model.MajorVM)
@Html.Partial("_MinorPartial", Model.MinorVM)
或者,只有一个具有属性public ICollection<Major> Majors { get; set; }
和public ICollection<Minor> Minors { get; set; }
的视图模型(不确定您是否为了简洁省略了其他一些属性,因此您需要具有单独的视图模型)