1

地図上に場所を表示するアプリケーションがあります。http://www.mydomain.com/parisのような素敵なハッキング可能な URL を取得できるように、ルートを作成しました。これは URL を入力するだけで問題なく機能しますが、ホームページに GET 要求を送信する検索フォームがあります。フォームが送信されると、ロケーション バーに表示される URL はhttp://www.mydomain.com/Dashboard?location=parisの形式になります。通常、これは正しいアクションを実行しているのであまり問題になりませんが、ショーを実行している backbone.js アプリケーションがあり、URL 構造に特に注意を払っています。

フォーム ACTION 属性が入力されたときに場所がわからないため、javascript またはリダイレクトなしで必要なことを実行することは不可能かもしれませんが、誰でも確認できますか?

これが私のルートです。

public static void RegisterRoutes( RouteCollection routes )
{
    routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
    routes.MapRoute(
        String.Empty,
        "{location}",
        new { 
            controller = "Dashboard",
            action = "Index",
            id = ""
        }
    );

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new
        {
            controller = "Home",
            action = "Index",
            id = UrlParameter.Optional
        } // Parameter defaults
    );

}

こちらがコントローラー。

public class DashboardController : Controller
{
    [HttpGet]
    public ViewResult Index(string location)
    {
        return View(new AccItemSearch { Location = location });
    }
}

これがフォームです。

        @using (Html.BeginForm("Index", "Dashboard", FormMethod.Get)) {
                <h2>Where are you going?</h2>
                <input type="text" placeholder="Area, town or postcode" id="location" name="location"/>
                <button>Search!</button>
            </div>
        }

明確にするために:私が助けたい問題は、ユーザーにフォームを送信させてから、次のURLのページに着陸させる方法です:http ://www.mydomain.com/searchtermしたがって、 URL http://www.mydomain.com/Dashboard

4

2 に答える 2

0

actionフォームが何を指しているのかわからないため、HTML生成中(つまりサーバー側)にフォームの属性を変更することはできません。したがって、URLを正確な検索用語にする必要がある場合、最も簡単なaction方法は、フォームを送信する前にJavaScriptを使用して属性を変更し、www.domain.com/に続くすべてのURLをキャッチするコントローラーを用意することです。検索語パターン。

特定のアクションにリダイレクトすることはできません。リダイレクトすると、ブラウザに返されるURLになり、検索語ごとに1つのアクションが必要になるとは思えません。

HTML:

<form method="post" id="myform">
    <input type="text" id="searchterm" />
    <input type="submit" value="Search" />
</form>

jQuery:

$(function () {
    $("#myform").submit(function () {
        var searchVal = $("#searchterm").val();
        $(this).attr("action", searchVal);
    });
});

ルート:

routes.MapRoute(
    "",
    "{searchterm}",
    new { controller = "Home", action = "Search" }
);

これはデフォルトルートのに置く必要があることに注意してください。

アクション:

public ActionResult Search(string searchterm)
{
    //do stuff
}

これで、訪問者が「アラスカ」という用語を入力して検索フォームを送信すると、最終的にdomain.com/Alaskaにアクセスします。

于 2012-11-05T14:57:22.697 に答える
0

そのフォームは、フォーム データを送信するための POST である必要があります。

検索は送信ボタンにする必要があります

 <input type="submit" name="Search" value="Search" />

それ以外の場合は、競合するルートがない限り、見栄えがします。ルートを単独でテストしましたが、問題ないようです。場所が送信されていないだけです。

于 2012-11-05T14:38:30.130 に答える