我们有一个ViewModel,其集合为Widget<dynamic>
:
public class Widget<T>
{
public string ViewName { get; set; }
public T Data { get; set; }
}
在我们的视图中,我们遍历小部件集合并调用Html.Partial
。
@foreach (var widget in Model) {
@Html.Partial(widget.ViewName, widget)
}
这可以提供部分具有动态模型或Widget<dynamic>
的模型。
但是,我想在局部视图中智能感知,所以我给我的视图一个适当的小部件数据类型的模型,例如:
@model Widget<string>
不幸的是,当@Html.Partial
将动态模型转换为System.Object时,会引发异常。
除了在局部内再次手动转换窗口小部件之外,还有一种方法可以在不将动态模型转换为对象的情况下调用Html.Partial
吗?
答案 0 :(得分:4)
创建一个接口,所有动态对象类型小部件都必须实现接口,我前一段时间做了同样的工作并且工作顺利
渲染的简单示例:(这只是一个必须完成的快速示例)
public interface IWidget{
public System.Web.Mvc.MvcHtmlString RenderMyWidget(HtmlHelper helper);
}
public class ContenidoWidgets : IWidget{
private String Controller { get; set; }
private String Action { get; set; }
private Object Parms {get; set; }
public ContenidoWidgets(String controller, String action, Object parms)
{
this.Controller = controller;
this.Action = action;
this.Parms = parms;
}
public System.Web.Mvc.MvcHtmlString RenderMyWidget(HtmlHelper helper){
return System.Web.Mvc.Html.ChildActionExtensions.Action(helper, this.Action, this.Controller, this.Parms);
}
观点......
@model IWidget
@model.RenderMyWidget(this.html);