ASP.NET MVC: как передать список (из класса в модели) в повторитель в представлении? - PullRequest
5 голосов
/ 24 ноября 2008

Как мне сделать выше? Я начал использовать MVC, и у меня возникли проблемы с передачей данных.

Моя конкретная проблема заключается в том, чтобы сделать список объектов, которые у меня есть в моей модели, к которым мне нужно обратиться в представлении и выполнить итерацию.

Заранее спасибо.

Ответы [ 4 ]

10 голосов
/ 24 ноября 2008

Допустим, ваше действие контроллера выглядит примерно так:

public ActionResult List()
{
    List<string> myList = database.GetListOfStrings();
    (...)
}

Теперь вы хотите передать свой список представлению, скажем «List.aspx». Это достигается тем, что действие возвращает ViewResult (ViewResult является подклассом ActionResult). Вы можете использовать метод View контроллера для возврата ViewResult следующим образом:

public ActionResult List()
{
    List<string> myList = database.GetListOfStrings();
    (...)
    return View("List", myList);
}

Чтобы иметь доступ к списку строго типизированным способом в вашем представлении, он должен быть производным от ViewPage, где T - тип данных, которые вы передаете. Таким образом, в текущем случае наше представление (в List .aspx.cs) будет примерно так:

public partial class List : ViewPage<string>
{
    (...)
}

Данные, передаваемые в представление таким образом, называются «ViewData». Чтобы получить доступ к данным, вы должны пройти через свойства ViewData.Model на ViewPage. Таким образом, чтобы отобразить содержимое списка, вы должны написать (в List.aspx)

<ul>
    <% foreach(var s in this.ViewData.Model){ %>
    <li> <%= s %> </li>
    <% } %>
</ul>

Здесь this.ViewData.Model имеет тип, указанный в параметре типа T в ViewPage, поэтому в нашем случае this.ViewData.Model имеет тип List.

Вы можете использовать ретранслятор для рендеринга подобных вещей, но я бы не рекомендовал это. Если вы хотите использовать нечто подобное, проверьте модуль Grid проекта MvcContrib на CodePlex.

4 голосов
/ 24 ноября 2008

Быстрый и грязный способ - передать его через ViewData

public ActionResult List()
{
    ViewData["MyList"] = new List<string> () {"test1", "test2"};

    return View ();
}

тогда вы можете получить к нему доступ в вашем представлении

<ul>
<% foreach (string item in (List<string>)ViewData["MyList"]) { %>
    <li><%= item %></li>
<% }%>
</ul>
2 голосов
/ 24 ноября 2008

ASP.NET MVC имеет несколько способов передачи данных в ваш View. Основной способ передачи классов вашей модели в View - это включение его в возвращенный класс ViewResult из вашего контроллера, как показано ниже:

Function List() As ViewResult
    ' pass other information in the viewdata dictionary
    ViewData("Title") = "All Items"
    ' get our item list from the Model classes
    Dim items = Model.ItemRepository.GetAllItems()
    ' return as part of result
    Return View(items)
End Function

Тогда из вашего поля зрения вы можете получить доступ к этому списку, как показано ниже:

<% For Each item In ViewData.Model %>
    <%=item.Name%>
<% End If %>

Другой метод передачи данных - это словарь ViewData, как показано в функции контроллера выше. Вы можете получить к нему доступ из своего поля зрения, как:

<%=ViewData("Title")%>

Надеюсь, это поможет.

1 голос
/ 24 ноября 2008

Если я не ошибаюсь, для управления повторителем требуется модель страницы. (Модель страницы - это то, что использует классический ASP.NET)

Но вы должны взглянуть на эту ссылку: http://haacked.com/archive/2008/05/03/code-based-repeater-for-asp.net-mvc.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...