我的主页上有一个下拉列表,我需要在页面加载时绑定到数据源。我有一个页面的基本控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
我想在视图页面上做这样的事情:
<select id="ddlCities">
<% foreach (var item in ViewData.Model.Cities) { %>
<option value='<%= item.CityID %>'><%= item.CityName %></option>
<% } %>
</select>
那么我需要修改我的Index()函数来返回一个View Model吗?我来自Web Forms,并且对这是如何工作有点困惑。
答案 0 :(得分:3)
您应该查看Action Filters。
您可以针对“动作”生命周期的不同状态覆盖ActionFilterAttribute
类的方法。
OnActionExecuting – This method is called before a controller action is executed.
OnActionExecuted – This method is called after a controller action is executed.
OnResultExecuting – This method is called before a controller action result is executed.
OnResultExecuted – This method is called after a controller action result is executed.
答案 1 :(得分:3)
史蒂芬,
你可以做得更简单。只需使用html帮助器:
<%=Html.DropDownList("ddlCities", ViewData["Cities"])%>
只要你的模型有一个名为Cities的可列表列表,这个'应该'适合你。
当然,您的“最佳”行动方案是将一个强类型模型传递给您的视图,例如:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SubSonic.Web.Models.Country>" %>
(在您的模型中,国家会有城市的集合 - 您会得到漂移:)
但上述情况仍然有效。
答案 2 :(得分:2)
public class HomeController : Controller
{
public ActionResult Index()
{
var cities = <data access code>
return View(cities);
}
}
@ Page Title='' Language='C#' MasterPageFile='~/Views/Shared/Site.Master' Inherits=System.Web.Mvc.ViewPage<IEnumerable<City>>
<select id="ddlCities">
<% foreach (var item in ViewData.Model.Cities) { %>
<option value='<%= item.CityID %>'><%= item.CityName %></option>
<% } %>
</select>