Как мне сделать это? Я начал использовать MVC, и у меня возникают проблемы с передачей данных.
Моя конкретная проблема связана со списком объектов, которые у меня есть в моей модели, к которым мне нужно получить доступ в представлении и выполнить итерацию.
Заранее спасибо.
Пожалуйста, сделайте свой вопрос более информативным относительно вашего реального сценария. «У меня проблемы с передачей информации» не поможет тем, кто отвечает, и тем, кто может найти ваш вопрос в будущем.
Да, извините, я использовал ASP.NET MVC в заголовке, но не в теле сообщения.





Если я не ошибаюсь, элемент управления повторителем требует модели страницы. (Модель страницы - это то, что использует классический 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.
большое спасибо, все были полезны, но этот помог мне больше всего
Должна ли ViewPage <string> быть ViewPage <List <string>>?
Да, Патрик, должен, но я так подумал!
Ах, извините за это. Рад, что ты это понял.
@Rune Как сделать так, чтобы представление расширялось от ViewPage <string>, если это html-файл?
есть ли продукт Microsoft под названием mvc? если да, то не должны ли мы бороться (снова) против использования общих слов в качестве названия продукта? не позволяйте ему спускаться вниз, как 'word', 'sql' и 'windows'