ASP.NET MVC: список городов и сохранение выбранного города в cookie
У меня есть список городов на моем сайте, этот список помещен в 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
А что вы думаете об этой схеме вообще? Может быть, вы используете другие методы для создания функциональности?
1 ответ
Интересная идея; он может быть лучше обслужен с помощью новой функции Html.Action() в MVC 2, где, по вашему мнению, вы можете вызвать <% = Html.Action ("ChangeCity", "Common")%>, чтобы отобразить город изменений действие в общем контроллере, и в этом есть логика, а не делать это для каждого действия.
НТН.