asp.net-mvc - ASP.NET MVC - 具有动态模型的 RenderPartial

标签 asp.net-mvc asp.net-mvc-3 dynamic

我们有一个 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/

相关文章:

c# - Web API 中的多个操作(差异名称、http 动词)的一条路线

asp.net-mvc - 使用相同的方法签名发布和获取

asp.net-mvc-3 - MVC CSV 文件下载 + Project Awesome

python - 动态大小多维数组

javascript - 移动设备上的 Bootstrap 聊天小部件

c# - 如何使用 ViewBag 存储字符串数组

asp.net-mvc - 我可以在 asp.net mvc Controller 中有多个 Post 方法吗?

javascript - 动态表完全加载后调用 JS 函数

jquery - 垂直居中内容除非更大

asp.net-mvc - ASP.NET MVC - 如何从不同的 Controller 维护 ModelState?