如何创建MVC UserControl

时间:2011-02-08 13:42:31

标签: asp.net-mvc user-controls repeater

我正在尝试在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中是否有更好的方法(我找不到任何体面的文章说过推荐的方式)。

1 个答案:

答案 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>