我需要在我的asp.net mvc(C#)應用程序的所有頁面中維護查詢字符串。維護mvc中所有頁面的查詢字符串
例如: 我會打電話給頁面www.example.com?Preview=True
。查詢字符串應該保持在www.example.com
中點擊的頁面。即當我點擊About us
頁面www.example.com
時,網址應該是www.example.com/AboutUs?Preview=True
我該如何做到這一點?什麼是做這個共同操作的最佳地點?
我需要在我的asp.net mvc(C#)應用程序的所有頁面中維護查詢字符串。維護mvc中所有頁面的查詢字符串
例如: 我會打電話給頁面www.example.com?Preview=True
。查詢字符串應該保持在www.example.com
中點擊的頁面。即當我點擊About us
頁面www.example.com
時,網址應該是www.example.com/AboutUs?Preview=True
我該如何做到這一點?什麼是做這個共同操作的最佳地點?
從@ eu-g E-NE。
我使用了@ eu-ge-ne的自定義路由的思路,將路由值添加到每個網址,並使用基本控制器來處理會話中的預覽鍵。
if ((requestContext.HttpContext.Request.QueryString != null &&
requestContext.HttpContext.Request.QueryString["Preview"] != null &&
requestContext.HttpContext.Request.QueryString["Preview"].ToString() =="True") ||
(requestContext.HttpContext.Request.UrlReferrer != null &&
requestContext.HttpContext.Request.UrlReferrer.ToString().Contains("Preview=True")))
{
//Add the preview key to session
}
else
{
//Remove the preview key to session
}
我在基本控制器的Initialize
方法中使用了上面的代碼。這樣預覽鍵將在會話中查詢字符串是否具有預覽,否則會從會話中刪除。
再次感謝@ eu-ge-ne。
也許你需要一個定製的路線?:
public class PreviewRoute : System.Web.Routing.Route
{
...
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
var preview = System.Web.HttpContext.Current.Session["Preview"];
if (!values.ContainsKey("Preview"))
values.Add("Preview", preview);
var path = base.GetVirtualPath(requestContext, values);
return path;
}
}
}
隨時設置Session["Preview"]
,你會得到你所有的網址?Preview=True
:
System.Web.HttpContext.Current.Session.Add("Preview", true);
更新:
使用在Global.asax.cs中這條路線:代替
routes.Add("Default",
new PreviewRoute("{controller}/{action}/{id}", new MvcRouteHandler()) {
Defaults = new RouteValueDictionary(
new { controller = "Home", action = "Index", id = "" }
)
}
);
:
routes.MapRouteLowercase(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
你也可以試試這個擴展:
public static class CustomRouteExtensions
{
public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults) {
routes.MapPreviewRoute(name, url, defaults, null);
}
public static void MapPreviewRoute(this RouteCollection routes, string name, string url, object defaults, object constraints) {
if (routes == null) {
throw new ArgumentNullException("routes");
}
if (url == null) {
throw new ArgumentNullException("url");
}
var route = new PreviewRoute(url, new MvcRouteHandler()) {
Defaults = new RouteValueDictionary(defaults),
Constraints = new RouteValueDictionary(constraints)
};
if (String.IsNullOrEmpty(name)) {
routes.Add(route);
}
else {
routes.Add(name, route);
}
}
}
在Global.asax.cs中:
routes.MapPreviewRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
想想你的設計有什麼問題,你不需要那樣做..我想。 – Matias 2009-11-24 11:31:55
如果用戶從主網站點擊預覽第二個網站,我需要給出該選項以禁用第二個網站中的所有控件。 – Prasad 2009-11-24 11:37:09