【问题标题】:ASP.NET MVC: Cities list and store selected city in cookieASP.NET MVC:城市列表并将所选城市存储在 cookie 中
【发布时间】:2010-09-17 10:10:50
【问题描述】:

我的网站上有城市列表,这个列表放在 Site.Master 中,看起来像:

<a id="<%= selectedCity.CityId %>"><%= selectedCity.Name %></a>
<ul>
    ...
    <li id="<%= city.CityId %>" >
    <%= Html.ActionLink(city.Name,"ChangeCity",new{ newCityId = city.CityId })%>
    </li>
    ...
</ul>

接下来,我所有的控制器都基于 BaseController,它包含下一个代码:

public int CityId {get;set;}
protected override void OnActionExecuting(ActionExecutingContext filterContext){
    if (filterContext.ActionDescriptor.ActionName.ToLower() != "changecity"){
        this.CityId = Convert.ToInt32(Request.Cookies["SiteCityId"]);  
        var city = LoadCity(this.CityId);
        var cities = LoadAllCities(); 
        CitiesModel model = new CitiesModel() { selectedCity=city, allCities=cities};
        ViewData["citiesModel"] = city;
    }
    else{
       Response.Cookies["SiteCityId"]=filterContext.ActionParameters["newCityId"];
    }   
}

在我的所有控制器中,我添加了下一个操作:

[HttpGet]
public ActionResult ChangeCity(string newCityId)
{
    return RedirectToAction(this.MyDefaultAction);
}

主要问题:这个架构不太好用。在 IE8 中,有时我无法更改当前城市使用的链接,例如下一个:

http://www.mysite.com/home/changecity/?newCityId=3

您对这个架构有什么看法?您可能会使用其他方法来创建功能吗?

【问题讨论】:

    标签: asp.net-mvc drop-down-menu countries


    【解决方案1】:

    有趣的想法;使用 MVC 2 中的新 Html.Action() 功能可能会更好,在您看来,您可以在其中调用 来显示更改城市一个通用控制器中的操作,并且有执行此操作的逻辑,而不是为每个操作都执行此操作。

    HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-03
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      相关资源
      最近更新 更多