0

サイトに都市のリストがあり、このリストは 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

そして、このスキーマについてどう思いますか? 機能を作成するために他の方法を使用できますか?

4

1 に答える 1

0

興味深いアイデアです。ビューで <%= Html.Action("ChangeCity", "Common") %> を呼び出して変更都市を表示できる、MVC 2 の新しい Html.Action() 機能を使用することで、より適切に機能する可能性があります。アクションは共通のコントローラーにあり、すべてのアクションに対して行うのではなく、これを行うロジックがあります。

HTH。

于 2010-09-17T11:20:13.930 に答える