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

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

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

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

есть ли продукт Microsoft под названием mvc? если да, то не должны ли мы бороться (снова) против использования общих слов в качестве названия продукта? не позволяйте ему спускаться вниз, как 'word', 'sql' и 'windows'

Javier 24.11.2008 21:27

Пожалуйста, сделайте свой вопрос более информативным относительно вашего реального сценария. «У меня проблемы с передачей информации» не поможет тем, кто отвечает, и тем, кто может найти ваш вопрос в будущем.

Eric Schoonover 24.11.2008 22:25

Да, извините, я использовал ASP.NET MVC в заголовке, но не в теле сообщения.

Tablet 24.11.2008 23:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
3
22 583
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

В ASP.NET MVC есть несколько способов передать данные в представление. Основной способ передачи классов вашей модели в представление - включить его в возвращаемый класс 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")%>

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

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

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

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.

большое спасибо, все были полезны, но этот помог мне больше всего

Tablet 24.11.2008 23:58

Должна ли ViewPage <string> быть ViewPage <List <string>>?

Patrik Svensson 25.11.2008 00:08

Да, Патрик, должен, но я так подумал!

Tablet 25.11.2008 12:30

Ах, извините за это. Рад, что ты это понял.

Rune 25.11.2008 20:31

@Rune Как сделать так, чтобы представление расширялось от ViewPage <string>, если это html-файл?

petko_stankoski 10.01.2012 20:27

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