ASP.NET MVC: как передать список (из класса в модели) в повторитель в представлении?

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

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

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

4 ответа

Решение

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

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.

Быстрый и грязный способ - передать его через 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>

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

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

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

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

Другие вопросы по тегам