asp.net-mvc-3 - MVC3 链接 SEO - 如何从一个 Controller 调用另一个 Controller

标签 asp.net-mvc-3 url seo controllers

我有一个问题,我不确定如何解释,但我会尝试。 我跟着这个:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx 我能够实现他们所描述的。 但是,如果我有一个页面,我希望从其他 Controller 调用操作,它就不起作用。 它不会以这种方式显示链接: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 的操作。

在家庭 Controller 中

[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);
    }

最佳答案

尝试将 Controller 移动到 @Html.ActionLink

的 RouteValues 字典部分
@Html.ActionLink(FaqStrings.ContactUs, "ContactUs", new {controller="Home", id = 1, pageTitle = "link text".ToSeoUrl() })

编辑

要解决该逻辑,它必须与 Html.ActionLink 方法的可用签名有关。 Here is the MSDN信息但是...

您使用的方法签名是 Html.ActionLink("Link Text", "Action", "Contoller", RouteValues, HtmlAttributes)。由于您没有传递 HtmlAttributes,它匹配错误并生成了错误的链接。通过将 Controller 移动到 RouteValuesDictionary 或在调用结束时传递 , null 应该可以解决它。但是,除非我需要,否则我个人不喜欢乱扔空值,所以我通常只在 RouteValuesDictionary 中定义 Controller 。

如果您没有传递任何 RouteValues,则调用 Html.ActionLink("Link Text", Action, Controller) 不会有任何问题。

希望这能稍微澄清一点! :)

关于asp.net-mvc-3 - MVC3 链接 SEO - 如何从一个 Controller 调用另一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075395/

相关文章:

c# - 从 MVC4 中的 View 将 2 个不同模型传递给 Controller ​​的适当方法是什么

asp.net - 使用 Ninject.MVC3 在测试项目中添加绑定(bind)

r - 如何解决此 RCurl 错误 : "SSL certificate problem: certificate has expired"?

jquery - 在 jstree 复选框中传递半选中节点的 id

asp.net - c# MVC3 ajax.beginform 上传文件不工作

php - 是否可以动态更改网页的 URL?

url - 等待几分钟以检查 URL 是否响应

javascript - 对于 SEO,在 HTML 的开头或结尾包含 JS 文件

html - 我应该为博客使用什么微数据?

html - HTML 元标记还重要吗?