我正在尝试在ASP.NET MVC项目中创建用户控件。我基本上有一些格式化数据,我想放在转发器中。在标准的ASP.NET中,我会在控件中填充如下内容:
<asp:Repeater ID="MyRepeater" runat="server"
DataSourceID="SQLDataSource" DataMember="DefaultView">
<ItemTemplate>
<uc1:Control ID = "MyControl" runat="server"
Field1='<%#Eval("[\"Field1\"]") %>' Field2='<%#Eval("[\"Field2\"]") %>' />
</ItemTemplate>
</asp:Repeater>
控件将在代码文件中具有相应的属性。但是,在MVC中,我没有将代码文件作为标准。我发现this问题描述了如何添加一个,但后来想知道在MVC中是否有更好的方法(我找不到任何体面的文章说过推荐的方式)。
答案 0 :(得分:3)
您不需要代码隐藏文件。为PartialView创建一个Model(ViewUserControl)并将其绑定到您的控件。
MVC的目的是让控件远离View,这应该是愚蠢的......或者至少不聪明。您的Controller应该将对象推送到包含已具有View所需内容的Model对象。
声明您的模型
public class MyModel
{
public IList<MyPartialView> Controls { get; set; }
}
public class MyPartialView
{
public string Field1 { get; set; }
public string Field2 { get; set; }
}
在您的控制器中创建操作,传递MyModel
对象
public ActionResult Index()
{
MyModel model = new MyModel();
model.Controls.Add(new MyPartialView() { Field1 = "a", Field2 = "b" };
model.Controls.Add(new MyPartialView() { Field1 = "x", Field2 = "y" };
model.Controls.Add(new MyPartialView() { Field1 = "m", Field2 = "n" };
return View(model);
}
创建视图,强烈输入MyModel
<%@ Page Language="C#" Inherits="ViewPage<MyModel>" %>
<% foreach(MyOtherPartialView partial in Model.Controls) { %>
<%=Html.RenderPartial("MyPartialView", partial) %>
<% } %>
创建部分视图严格键入MyPartialView
<%@ Control Language="C#" Inherits="ViewUserControl<MyPartialView>" %>
<div>
<%=Model.Field1 %> - <%=Model.Field2 %>
</div>