net mvc hacer form como asp and asp.net-mvc user-controls repeater

asp.net mvc - hacer - Cómo crear un MVC UserControl



security asp net mvc (1)

Estoy intentando crear un control de usuario en un proyecto ASP.NET MVC. Básicamente, tengo algunos datos formateados que quiero poner dentro de un repetidor. En ASP.NET estándar, rellenaría el control algo como esto:

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

Y el control tendría las propiedades correspondientes en el archivo de código. Sin embargo, en MVC, no obtengo un archivo de código como estándar. Encontré esta pregunta que describe cómo agregar una, pero luego me pregunté si hay una forma mejor de hacerlo en MVC (no pude encontrar ningún artículo decente que dijera la forma recomendada).


No necesita archivos de código subyacente. Cree un modelo para su PartialView (ViewUserControl) y vincule eso a su control.

El objetivo de MVC es mantener el control alejado de la Vista, que debería ser tonto ... o al menos no inteligente. Su controlador debe insertar un objeto que contenga un objeto modelo que ya tiene todo lo que la vista necesita.

Declara tu modelo

public class MyModel { public IList<MyPartialView> Controls { get; set; } } public class MyPartialView { public string Field1 { get; set; } public string Field2 { get; set; } }

Crea tu acción en tu Controlador pasando un objeto 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); }

Crea tu vista fuertemente MyModel en MyModel

<%@ Page Language="C#" Inherits="ViewPage<MyModel>" %> <% foreach(MyOtherPartialView partial in Model.Controls) { %> <%=Html.RenderPartial("MyPartialView", partial) %> <% } %>

Crea tu vista parcial MyPartialView a MyPartialView

<%@ Control Language="C#" Inherits="ViewUserControl<MyPartialView>" %> <div> <%=Model.Field1 %> - <%=Model.Field2 %> </div>