2

MVC4の使用

検索ボックスを作成している部分的なビューがあります。送信ボタンをクリックすると、検索値がコントロールに渡され、グループがフィルタリングされます。

すべてがうまくフィルタリングされます。ただし、アクションを実行した後に取得したいURLが表示されません。localhost/を取得します

私が表示したいのはlocalhost/mySearchValueです

プロジェクトのルーティングは、ローカルホストの後に値を入力した場合に、検索ボタンと同じようにグループをフィルタリングするように設定されています。

検索値をURLに表示するために何をする必要があるかについてのアイデアはありますか?

これが私の部分的な見解です

@using (Html.BeginForm("List","Group"))
{ 
   @Html.TextBox(name: "search")
   <input type="submit"  value="search" />
}

私のコントローラー

public ViewResult List(string search, int page = 1)
    {
        if (search == "")
        {
            search = null;
        }
        GroupsListViewModel model = new GroupsListViewModel
        {
            Groups = repository.Groups
            .Where(g => search == null || g.Tag == search || g.Tag2 == search)
            .OrderBy(g => g.GroupId)
            .Skip((page - 1) * PageSize)
            .Take(PageSize),
            PagingInfo = new PagingInfo
            {
                CurrentPage = page,
                ItemsPerPage = PageSize,
                TotalItems = repository.Groups.Count()
            },
            CurrentSearch = search
        };

アップデート

@Html.BeginForm("List","Group",FormMethod.Get)

localhost /?search = testのようにURLを取得するのに役立ちますが、コントローラーが呼び出されたときに検索が設定されていないため、フィルタリングは行われません。検索用の私のURLスキーマは次のとおりですlocalhost/test

これが私のルーティング情報です

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(null, 
            "",
            new { 
                controller = "Group", action = "List",
                search = (string)null, page = 1
            }
    );

        routes.MapRoute(null,
            "Page{page}",
            new { controller = "Group", action = "List", search = (string)null },
            new { page = @"\d+" }
            );

        routes.MapRoute(null,
            "{search}",
            new { Controller = "Group", action = "List", page = 1 }
            );

        routes.MapRoute(null,
            "{search}/Page{page}",
            new { controller = "Group", action = "List" },
            new { page = @"\d+" }
        );

        routes.MapRoute(null, "{controller}/{action}");
    }
4

1 に答える 1

2

説明

質問を理解している限り

デフォルトのフォームメソッドは、URLに検索文字列を表示するためにPOST、フォームメソッドをに設定する必要があるためです。GET

あなたをもっと助けるためにあなたが何を望んでいるのかわからない場合は(コメントとして)私に知らせてください)

サンプル

@Html.BeginForm("List","Group",FormMethod.Get)

詳しくは

于 2013-03-08T23:41:47.670 に答える