ASP.NET MVC: список городов и сохранение выбранного города в cookie - PullRequest
0 голосов
/ 17 сентября 2010

У меня есть список городов на моем сайте, этот список помещен в 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 Ответ

0 голосов
/ 17 сентября 2010

Интересная идея; он может быть лучше обслужен с помощью новой функции Html.Action () в MVC 2, где, по вашему мнению, вы можете вызвать <% = Html.Action ("ChangeCity", "Common")%> для отображения города изменений действие в общем контроллере, и в этом есть логика, чтобы делать это, а не делать это для каждого действия.

НТН.

...