0

私はここで何かについて少し混乱しています。フォームがあり、そのフォームの URL は次のとおりです。

http://domain.com/Home/requestquote

フォームで [送信] をクリックし、フォーム コントローラーにあるこのフォームを処理するメソッドがビューを返すと、URI は次のようになります。

http://domain.com/form/requestQuoteSubmitrequestQuoteSubmitメソッドはどこにありますか。

これは、検証によってエラーのためにページが返された場合と、フォームの送信が成功した場合の両方で発生します。

成功した場合、ビューは返さHome/thanksれ、エラーの場合は単に返されHome/requestquoteます。URI が本来あるべきものではないという事実を除いて、すべてが正常に機能しているように見えます。私のリンクは次のようになっているため、これによりページ上の他のすべてが壊れます。

@Url.RouteUrl(Model.CompanyPageDatabaseModel.companyCode, new { Controller = MVC.services.Name, Action = MVC.services.ActionNames.page })

そのため、companyCode 値が適切に渡されず、リンクが正しく形成されません。フォームメソッドが正しいページを送り返す方法や理由がわかりませんが、URI をそれ自体に設定していますか?

これが私のルートです。

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

        routes.MapRoute(
            null,
            "{action}",
            new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Index },
            new { RootAction = new RootActionConstraint() }  // Route Constraint
        );

        routes.MapRoute(
            null, // Route name
            "{controller}/{action}", // URL with parameters
            new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Index }, // Parameter defaults
            new { controller = "Home|contact|franchise|form|resources|services|technology|community|careers|carriers|about" }
        );

        routes.MapRoute(
           null,
           "{companyCode}/{action}",
           new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Index },
           new { RootAction = new RootActionConstraint() }  // Route Constraint
       );

        routes.MapRoute(
            "jax",
            "{companyCode}/{controller}/{action}",
            new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Index }
        );

最後のルート値は、フランチャイズ ルートの例です。

また、ビュー内のフォーム コードは次のとおりです。

        @using (Html.BeginForm("requestquote", "form", FormMethod.Post))
    {   }

何か案は?

ありがとう。

編集:私のルートに追加されました。

4

1 に答える 1

0

Post-Redirect-Get の略である PRG と呼ばれる概念があります。

基本的な考え方は、フォームをアプリケーションに投稿することです。入力を処理した後、送信から直接コンテンツ応答をユーザーに提供する代わりに、正しい URL で Get要求にリダイレクトします。

これには多くの理由がありますが、根底にあるのは関心の分離です。(懸念事項を分離しないと、ページ上ですべてのリンクが壊れる可能性があるなどの奇妙なことが発生する傾向があります...)

したがって、あなたにとっての解決策は、送信を処理し、無効な場合は検証コンテンツを保存しTempDataRedirectToRouteResult(controller:"Home",action:"RequestQuote")

更新:この概念を学ぶために読んだ元の記事を見つけました。これは、元の ASP.NET MVC リリースに関するものですが、ほとんど同じはずです。http://www.eworldui.net/blog/post/2008/05/ASPNET-MVC---Using-Post2c-Redirect2c-Get-Pattern.aspxを確認してください

于 2012-06-06T07:08:31.183 に答える