在ASP.NET MVC中的页面加载上执行某些操作

时间:2010-09-30 19:34:51

标签: c# asp.net-mvc

我的主页上有一个下拉列表,我需要在页面加载时绑定到数据源。我有一个页面的基本控制器:

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,并且对这是如何工作有点困惑。

3 个答案:

答案 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>