Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC中执行页面加载操作_C#_Asp.net Mvc - Fatal编程技术网

C# 在ASP.NET MVC中执行页面加载操作

C# 在ASP.NET MVC中执行页面加载操作,c#,asp.net-mvc,C#,Asp.net Mvc,我的主页上有一个下拉列表,当页面加载时,我需要绑定到数据源。我有一个页面的基本控制器: public class HomeController : Controller { public ActionResult Index() { return View(); } } 我想在“查看”页面上执行以下操作: <select id="ddlCities"> <% foreach (var item in ViewData.Model

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

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()函数以返回视图模型?我来自网络表单,对它的工作原理有点困惑。

你应该看看

您可以为“操作”生命周期的不同状态覆盖
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.
史蒂文

你可以做得更简单。只需使用html帮助程序:

<%=Html.DropDownList("ddlCities", ViewData["Cities"])%>

只要你的模型有一个叫做“城市”的ienumerable列表,这个“应该”对你有用

当然,您的“最佳”做法是将强类型模型传递给您的视图,例如:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SubSonic.Web.Models.Country>" %>

(在您的模型中,国家将有一个城市的集合——您得到了大意:)

但上述方法仍然有效。

公共类HomeController:Controller
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>
{ 公共行动结果索引() { var城市= 返回视图(城市); } } @页面标题=''Language='C#'MasterPageFile='~/Views/Shared/Site.Master'Inherits=System.Web.Mvc.ViewPage
但是要小心,因为并不总是调用
OnActionExecuted
。是的,也许我的解决方案对他的问题来说有点过分了。我同意Henrik的观点,这可能有点复杂。谢谢你的回答,我不知道动作过滤器。如果我只需要绑定那个下拉列表就行了,但是我还有几个下拉列表,我需要在页面加载时绑定到数据源。抱歉,应该更具体一些。您可以使模型更复杂以保存这些集合,也可以将集合传递给ViewData字典中的视图,如ViewData[“cities”]=。。。ViewData[“国家”]=。。。在视图中,您可以将其转换回foreach(在(IEnumerable)ViewData[“cities”]中的var项),我认为这是我在这里尝试的最佳解决方案。谢谢