我们有一个 ViewModel,其中包含 Widget<dynamic>
的集合:
public class Widget<T>
{
public string ViewName { get; set; }
public T Data { get; set; }
}
在我们的 View 中,我们循环遍历小部件集合并调用 Html.Partial
.
@foreach (var widget in Model) {
@Html.Partial(widget.ViewName, widget)
}
如果部分具有动态模型或 Widget<dynamic>
模型,则此方法有效。 .
但是,我希望在部分 View 中进行智能感知,因此我为我的 View 提供了适当的小部件数据类型的模型,例如:
@model Widget<string>
不幸的是,这会引发异常 @Html.Partial
正在将动态模型转换为 System.Object。
除了在局部中再次手动转换小部件之外,还有其他方法可以调用 Html.Partial
没有将动态模型转换为对象?
最佳答案
创建一个接口(interface),所有动态对象类型小部件都必须实现该接口(interface),我之前也这样做过,并且工作顺利
带有渲染的简单示例:(这只是您必须完成的快速示例)
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);
关于asp.net-mvc - ASP.NET MVC - 具有动态模型的 RenderPartial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11226962/