0

問題が1つあります。説明方法がわかりませんが、試してみます。私はこれに従いました:http ://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx そして私は彼らが説明することを達成することができました。しかし、他のコントローラーからアクションを呼び出したいページがある場合、それは機能しません。このようにリンクは表示されません:URLの「this-is-my-link」。

何が間違っているのかわかりませんか?

Global.asaxで

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

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

        routes.MapRoute(
            "Default2",
            "{controller}/{action}/{id}/{pageTitle}",
            new
                {
                    controller = "Home",
                    action = "Index",
                    id = UrlParameter.Optional,
                    pageTitle = UrlParameter.Optional
                }
            );

    }

ビュー/ヘルプ/よくある質問

@Html.ActionLink(FaqStrings.ContactUs, "ContactUs", "Home", new { id = 1, pageTitle = "link text".ToSeoUrl() })

ContactUsを解決できないと表示されます。HomeControllerからのアクションの代わりに、HelpControllerのアクションを確認します。

HomeControllerで

[AllowAnonymous]
    public ActionResult ContactUs()
    {
        var model = new ViewModelContactUs
                        {
                            Resultmessage = string.Empty,
                            Youremail = string.Empty,
                            Yourmessage = string.Empty,
                            Yourname = string.Empty
                        };
        return View(model);
    }

    [AllowAnonymous]
    [HttpPost]
    public ActionResult ContactUs(ViewModelContactUs model)
    {
        Log.DebugFormat("HomeController-ContactUs()");

.......。

        var model2 = new ViewModelContactUs
                         {
                             ......
                         };

        ModelState.Clear();
        return View(model2);
    }
4

2 に答える 2

1

コントローラをあなたのRouteValuesディクショナリ部分に移動してみてください@Html.ActionLink

@Html.ActionLink(FaqStrings.ContactUs, "ContactUs", new {controller="Home", id = 1, pageTitle = "link text".ToSeoUrl() })

編集

ロジックに対処するには、Html.ActionLinkメソッドの使用可能なシグネチャと関係があります。 これが情報のためのMSDNですが...

使用していたメソッドシグネチャはでしたHtml.ActionLink("Link Text", "Action", "Contoller", RouteValues, HtmlAttributes)。HtmlAttributesを渡していないため、一致が間違っていて、間違ったリンクが生成されていました。コントローラをに移動するか、通話の最後にRouteValuesDictionaryaを渡すことで、問題を解決できます。, nullしかし、私は個人的に、必要がない限りnullをスローするのは好きではないので、通常はでコントローラーを定義するだけRouteValuesDictionaryです。

RouteValuesを渡していない場合、への呼び出しHtml.ActionLink("Link Text", Action, Controller)は問題なく機能します。

それが少しクリアになることを願っています!:)

于 2012-10-25T20:34:01.303 に答える
1

根本的な問題は次のとおりです。

@Html.ActionLink(FaqStrings.ContactUs, 
                 "ContactUs", 
                 "Home", 
                 new { id = 1, pageTitle = "link text".ToSeoUrl() })

Anchorクリックするとを生成しますが、メソッドHTTP GETが必要としているものを生成しますHTTP POST

[AllowAnonymous]
[HttpPost]  // <-----POST
public ActionResult ContactUs(ViewModelContactUs model)
于 2012-10-25T21:21:26.123 に答える