MVC "UrlData[0]"

27 浏览
0 Comments

MVC "UrlData[0]"

最近我从WebPages转到了MVC,并开始将其应用于实际中。在我的管理面板中,我尝试让用户能够添加动态页面,例如"Website.com/Pages/About" - 这里的"About"是动态部分,URL应该从数据库生成。在WebPages中,你可以在CSHTML中轻松使用foreach实现这一点,然后在"Pages"文件中,你可以通过使用"UrlData[0]"来获取动态页面的URL/名称。然而,在我的MVC项目的控制器中似乎无法使用这个函数,所以我正在寻找另一种解决方案。我希望在URL中避免使用ID,只保留页面的名称。我也知道我可以使用查询字符串来实现这一点,但我认为没有查询字符串的URL看起来更好,至少对于这个动态页面系统来说。提前感谢您的帮助!

0
0 Comments

问题出现的原因是在使用ActionLink时,路由值被错误地放置在了HtmlAttributes中。解决方法是将路由值正确地放置在ActionLink中。

在RouteConfig.cs中配置路由,可以参考这篇教程:http://www.codeproject.com/Articles/641783/Customizing-Routes-in-ASP-NET-MVC

下面是对话的整理:

用户:我想你想要的是在RouteConfig.cs中配置路由。参考这篇教程,我相信这会解决我的问题。

回答者:很高兴帮助到你。如果有任何问题请告诉我。

用户:现在已经解决了,但是它是在查询字符串中,我需要的是"website.com/Pages/About"而不是"website.com/Pages?pageUrl=About"。抱歉给你添麻烦了。

回答者:这是在使用ActionLink之后出现的吗?如果是的话,请参考这个链接:stackoverflow.com/questions/18734540/… 如果不是,请问你在RouteConfig.cs中放置了什么内容?

用户:这是在使用ActionLink之后出现的,我已经解决了这个问题,现在不再出现?Length=4了,但是之后它不会再添加页面URL。再次感谢你的帮助!

回答者:在我的MapRoute中,我放置了这个内容:

routes.MapRoute(
    name: "Pages",
    url: "Pages/{pageUrl}",
    defaults: new { controller = "Home", action = "Pages", pageUrl = UrlParameter.Optional },
    namespaces: new[] { "ElevForum.Controllers" }
);

没有问题。我刚刚在我的项目中尝试了你的路由(没有命名空间参数),它正常工作。 localhost:1138/Pages/PageURL 将我重定向到home控制器的pages操作。也许问题在于你的ActionLink。这个对我来说是有效的ActionLink: .ActionLink("My link Text", "PageURL", "Pages")

用户:非常感谢,结果发现问题在于ActionLink,我不知怎么把路由值放在了HtmlAttributes中。太傻了,谢谢你!

0