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