2011-02-08 75 views
4

我试图创建在ASP.NET MVC项目中的用户控件。我基本上有一些格式化的数据,我想放在一个中继器内。在标准的ASP.NET,我会填充控制是这样的:如何创建一个MVC用户控件

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

而控制必须在相应的CodeFile属性。但是,在MVC中,我没有得到一个标准的代码文件。我发现this疑问,介绍了如何添加一个,但后来不知道是否有在MVC做这个(我无法找到任何像样的文章,说的推荐方法)的更好的方法。

+0

没有这个回答你的问题? – hunter 2011-02-16 00:24:05

回答

3

你不需要代码隐藏文件。为您的PartialView(ViewUserControl)创建一个模型并将其绑定到您的控件。

MVC的一点是要保持控制从视图,这应该是愚蠢的......或至少不智能了。您的控制器应该将对象推送到包含Model对象,该对象已具有View所需的所有内容。

声明模型

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) %> 
<% } %> 

创建您的局部视图 stronly输入到MyPartialView

<%@ Control Language="C#" Inherits="ViewUserControl<MyPartialView>" %> 

<div> 
    <%=Model.Field1 %> - <%=Model.Field2 %> 
</div> 
+0

你是说数据访问应该在Controller中?我的印象是这应该在模型中。 – 2011-02-22 13:02:29

相关问题