Как создать MVC UserControl - PullRequest
       1

Как создать MVC UserControl

4 голосов
/ 08 февраля 2011

Я пытаюсь создать пользовательский элемент управления в проекте 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 я не получаю кодовый файл в качестве стандарта.Я нашел этот вопрос, в котором описано, как его добавить, но потом подумал, есть ли лучший способ сделать это в MVC (я не смог найти ни одной достойной статьи, в которой говорилось бы, как это сделать).

1 Ответ

3 голосов
/ 08 февраля 2011

Вам не нужны файлы с выделенным кодом. Создайте модель для вашего PartialView (ViewUserControl) и привяжите ее к вашему элементу управления.

Смысл MVC заключается в том, чтобы держать элемент управления подальше от View, который должен быть тупым ... или, по крайней мере, неумным. Ваш контроллер должен передать объект, содержащий объект 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) %>
<% } %>

Создайте частичное представление , набранное MyPartialView

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

<div>
    <%=Model.Field1 %> - <%=Model.Field2 %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...