にHTTPのGETフォームをcanonicalizing助けが必要。正しい検索結果を返すのは3つの側面すべてからの変数に依存するため、これらの項目はすべて同じ形式でレンダリングする必要があります。私がしようとしているのは、クエリ文字列からパラメータを移動して正規のURLに入れることです。私はほとんどそこだは、私は3つの目的がありますasp.net MVCサイトでフォームを持っているのasp.net MVC
は、ここにあるこれまでのところ(エリア、コントローラ、およびアクション名のT4MVCを使用して)私の3つのルートの設定:
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ルートに提出この構文:
[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);
}
:MyWidgetsControllerで
@using (Html.BeginForm(MVC.MyArea.MyWidgets.CanonicalizeSearch(),
FormMethod.Get))
、2つのアクションメソッドがあります
これは、キーワードを除いて、すべてのクエリ文字変数を標準化されたルートに移動するために機能します。最初のルートにキーワードパラメータを追加すると、CanonicalizeSearchアクションは、キーワードがnull、空白または空白でない場合にのみ、検索アクションにリダイレクトされます。これは、キーワードが入力されていないときにページの結果を閲覧することが不可能になるため、うまくいきません。私は、私はすべて試したと思う
- 私が見えることができます唯一の方法は、この作業を取得しかし、他の3つのパラメータにキーワードを追加する第四ルートを追加し、キーワードにコントローラのデフォルト値を与える、などをされますキーワードをクエリ文字列パラメータとして保持する(実際には、CanonicalizeSearchのキーワードに下線を付けて、それを検索で取り除くことで動作させることができますが、それはかなりハッキリです)。
助けが必要ですか?
- 私は、キーワードを追加したとき、私はこのようなURLを設定するため:「私のエリア/私の-ウィジェット/検索/ {サイズ}は-results-MAXを/ PAGE- { page}/order-by- {sort}/keyword- {keyword} "と入力します。私が「my-area/my-widgets/search/{size} -results-max/page- {page}/order-by- {sort}/{keyword}」というURLを設定すると、 keyword == null。 – danludwig