如何使用Html.RenderPartial()将任意位的数据传递给ASP.NET MVC中的用户控件?

如何使用Html.RenderPartial()将任意位的数据传递给ASP.NET MVC中的用户控件?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有一个强类型用户控件(“partial”),我希望能够从它的包含视图向它传递一些附加信息。例如,我有一个绑定到product类的视图,我有一个partial,它也强类型化到同一个模型,但我还需要将imageSize的附加参数传递给我的partial。我希望能够做到这样: <% Html.RenderPartial("_ProductImage", ViewData.Model, new { imageSize = 100 }); %> 据我所知,没有办法做到这一点,但我希望比

我有一个强类型用户控件(“partial”),我希望能够从它的包含视图向它传递一些附加信息。例如,我有一个绑定到product类的视图,我有一个partial,它也强类型化到同一个模型,但我还需要将imageSize的附加参数传递给我的partial。我希望能够做到这样:

<% Html.RenderPartial("_ProductImage", ViewData.Model, new { imageSize = 100 }); %>


据我所知,没有办法做到这一点,但我希望比我聪明的人能找到解决办法;)

更改部分模型的类型:

class PartialModel 
{
    public int ImageSize { get; set; }
    public ParentModelType ParentModel { get; set; }
}
现在通过它:

<% Html.RenderPartial("_ProductImage", 
    new PartialModel() { ImageSize = 100, ParentModel = ViewData.Model }); %>

不是最漂亮的解决方案

<% ViewData["imageSize"] = 100; %>

<% Html.RenderPartial("_ProductImage"); %>


默认情况下,ViewData是传递的

我使用一个通用的类模型-这在概念上与Craig建议的方法类似

我有点希望微软能为RenderPartial创建一个重载,为我们提供同样的功能。只需添加一个
对象数据
参数即可

无论如何,我的方法是创建一个使用泛型的PartialModel,这样它就可以用于所有.ascx控件

 public class PartialControlModel<T> : ModelBase 
    {
        public T ParentModel { get; set; }
        public object Data { get; set; }

        public PartialControlModel(T parentModel, object data) : base()
        {
            ParentModel = parentModel;
            Data = data;
        }
    }
然后按如下方式渲染:

<% Html.RenderPartial("ThumbnailPanel", 
new PartialControlModel<GalleryModel>(ViewData.Model, tag)); %>
您可以使用以下方法获取数据并将其转换为正确的类型:

ViewData.Model.Data
如果有人对如何改进我使用的泛型有什么建议,请告诉我

ViewData.Model.ParentModel.Images
ViewData.Model.Data