0

我有一个问题,我不知道如何解释,但我会尝试。我遵循了这个: 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,因此匹配错误并生成了错误的链接。通过将控制器移入或在调用结束时RouteValuesDictionary传递 a应该可以解决它。, 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 回答