我在asp.net mvc網站中有一個表單,它有三種用途:分頁,排序和搜索。這些項目都應該以相同的形式呈現,因爲返回正確的搜索結果取決於來自所有3個方面的變量。我想要做的是將參數從查詢字符串中移出並放入規範URL中。需要幫助在asp.net中規範化HTTP GET表單mvc
我幾乎沒有,這裏有我的3個路由配置到目前爲止(使用T4MVC的區域,控制器和動作名):
context.MapRoute(null,
"my-area/my-widgets/search/{size}-results-max/page-{page}/order-by-{sort}",
new
{
area = MVC.MyArea.Name,
controller = MVC.MyArea.MyWidgets.Name,
action = MVC.MyArea.MyWidgets.ActionNames.Search,
page = UrlParameter.Optional,
size = UrlParameter.Optional,
sort = UrlParameter.Optional,
}
);
context.MapRoute(null,
"my-area/my-widgets/canonicalize-search",
new
{
area = MVC.MyArea.Name,
controller = MVC.MyArea.MyWidgets.Name,
action = MVC.MyArea.MyWidgets.ActionNames.CanonicalizeSearch,
}
);
context.MapRoute(null,
"my-area/my-widgets",
new
{
area = MVC.MyArea.Name,
controller = MVC.MyArea.MyWidgets.Name,
action = MVC.MyArea.MyWidgets.ActionNames.CanonicalizeSearch,
}
);
視圖中的形式提交給CanonicalizeSearch路線,使用此語法:
@using (Html.BeginForm(MVC.MyArea.MyWidgets.CanonicalizeSearch(),
FormMethod.Get))
在MyWidgetsController,有2點動作的方法:
[ActionName("canonicalize-search")]
public virtual RedirectToRouteResult CanonicalizeSearch(string keyword,
int page = 1, int size = 10, string sort = "Title-Ascending")
{
var result = RedirectToRoutePermanent(new
{
area = MVC.MyArea.Name,
controller = MVC.MyArea.MyWidgets.Name,
action = MVC.MyArea.MyWidgets.ActionNames.Search,
page = page,
size = size,
sort = sort,
keyword = keyword,
});
return result;
}
[ActionName("search")]
public virtual ViewResult Search(string keyword,
int page = 1, int size = 10, string sort = "Title-Ascending")
{
// code to perform query
return View(model);
}
這適用於將所有查詢字符串變量移至標準化路線,但關鍵字除外。如果我向第一個路由添加關鍵字參數,那麼當關鍵字不爲空,空或空格時,CanonicalizeSearch操作只會重定向到搜索操作。這是不好的,因爲當沒有輸入關鍵字時,它使瀏覽頁面結果變得不可能。
我想我已經嘗試了一切 - 給控制器中的關鍵字一個默認值,添加第4條路線,將關鍵字添加到其他3個參數等。但是,我看起來得到這個工作的唯一途徑是通過將關鍵字保留爲查詢字符串參數。 (實際上,我可以通過在CanonicalizeSearch中將關鍵字預先加下劃線並在Search中將其剝離來實現,但這很不合理)。
任何幫助?
發現爲什麼它沒有傳遞參數 - 因爲當我添加關鍵字時,我設置了這樣的網址:「my-area/my-widgets/search/{size} -results-max/page- { PAGE} /順序逐{}排序/關鍵字定位{}關鍵字」。如果我將url設置爲「my-area/my-widgets/search/{size} -results-max/page- {page}/order-by- {sort}/{keyword}」,關鍵字== null。 – danludwig 2011-01-20 06:06:41