我的网站上有城市列表,此列表位于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
您对此架构的看法是什么?您可以使用其他方法来创建功能吗?
答案 0 :(得分:0)
有趣的想法;使用MVC 2中的新Html.Action()功能可能会更好,在您的视图中,您可以调用&lt;%= Html.Action(“ChangeCity”,“Common”)%&gt;在公共控制器中显示更改城市操作,并且存在执行此操作的逻辑,而不是针对每个操作执行此操作。
HTH。