基于ASP.Net MVC 4.0的场景:
我需要在屏幕上呈现一组具有自定义字段的Widgetsaka用户控件。这个小部件的ViewModel是这样的-
Public Class Widget
{
public string Header {get;set;}
//Note the data type here. It causes issues with rendering Widget itself.
public object ActualContent {get;set;}
public string Footer {get;set;}
}在运行时,假设我想呈现两个小部件.然后,我所需要做的就是创建如下所示的实例:
Widget w1 = new Widget()
{
Header ="PatientDetails",
ActualContent = new Patient ()
{
FirstName = "ABC",
LastName = "XYZ"
}
Footer = "PatientDetails
};
Widget w2 = new Widget()
{
Header ="Address-Header",
ActualContent = new Address ()
{
ZIPCode = "123456",
Extn = "1234"
}
Footer = "Address-Footer"
};cshtmls是:
Main Page i.e Widget.cshtml
@using Widgets.Models
@model List<Widget>
...
<div class="widget">
<div class="header">
@Model.Header
</div>
<div class="body" >
@Html.EditorFor(model => Model.ActualContent)
</div>
<div class="footer">
@Model.Footer
</div>
</div>
...
Patient.cshtml in ~\Views\Shared\EditorTemplates
@model Widgets.Models.Patient
<div class="editor-label">
@Html.LabelFor(model => Model.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model.FirstName)
@Html.ValidationMessageFor(model => Model.FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => Model.LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model.LastName)
@Html.ValidationMessageFor(model => Model.LastName)
</div>Address.cshtml也有类似的实现。
注意,属性ActualContent的类型为object。可以在运行时为任何UserControl患者、地址等分配一个实例。另外,每个UserControls都有一个在EditorTemplates中定义的相应强类型的cshtml视图。
问题:现在的问题是,当我尝试加载小部件时,我可以看到两个小部件都被呈现,但只显示页眉和页脚值。与ActualContent属性相对应的部分(如上面所示)根本没有呈现,尽管在去大的时候,我可以看到相应的用于病人和地址的.cshtml正在被访问!
我觉得我可能错过了一些东西。
如果有人能帮我工作那就太好了。提前谢谢。[医]桑德什湖
发布于 2014-02-13 08:05:35
尝试像这样访问编辑器模板,
@Html.EditorFor(m => m.ActualContent, "_YourEditorTemplate")https://stackoverflow.com/questions/21748142
复制相似问题