2010-09-17 85 views
0

我有我的網站上的城市名單,這個名單擺在的Site.Master,看起來像:ASP.NET MVC:城市名單和存儲選擇的城市中的cookie

<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); 
} 

主要闕stion:這個模式不是很好的工作。在IE8有時我不能改變當前的城市使用鏈接,如下:

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

你對這個模式有什麼看法?可能你使用其他方法來創建功能?

回答

0

有趣的想法;它可能會使用新的Html.Action()功能MVC 2,您可以在您看來,叫<%= Html.Action(「ChangeCity」,「通用」)得到更好的服務%>顯示切換城市在一個共同的控制者中採取行動,並且有邏輯來做到這一點,而不是爲每一個行動做。

HTH。