2011-02-08 26 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

相關問題