如何将网址更改为该模型的某个属性?

时间:2013-06-11 08:05:26

标签: c# asp.net-mvc-3 url-routing

让我解释一下我想要的很容易: 我有一个名为Section的模型。我的部分模型有一个名为UrlSafe的属性。我现在在url中显示我的urlsafes。这意味着我的网址是这样的:

www.test.com/section/show/(the section's urlsafe goes here)

但我现在要做的是从网址中删除section/show。我想这样做:

www.test.com/(my section's urlsafe)

更多信息:

1-我在MVC3下工作

2-我的模型是这样的:

public class Section
{
    public int SectionId { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public string MetaTag { get; set; }
    public string MetaDescription { get; set; }
    public string UrlSafe { get; set; }
    public string Header { get; set; }
    public string ImageName { get; set; }
}

3-我的链接是这样的:

<a href="@Url.Action("Show", "Section", new { sectionUrl = sectionItem.UrlSafe }, null)">@sectionItem.Name</a>

4-我的控制器如下所示:

public ActionResult Show(string sectionUrl)
{
    var section = sectionApp.GetSectionBySectionUrl(sectionUrl);
    return View(section);
}

5-最后我在Global.asax中有这些行:

routes.MapRoute(
    name: "Section",
    url: "{controller}/show/{sectionUrl}",
    defaults: new { controller = "Section", action = "Show", sectionUrl = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{name}",
    defaults: new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);

你的解决方案是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

你试过这个吗?

routes.MapRoute(
    name: "Section",
    url: "{sectionUrl}",
    defaults: new { controller = "Section", action = "Show", sectionUrl =     UrlParameter.Optional }
);

完全同意@Levi Botelho评论

答案 1 :(得分:1)

原则上你只需要改变这个:

routes.MapRoute(
    name: "Section",
    url: "{controller}/show/{sectionUrl}",
    defaults: new { controller = "Section", action = "Show", sectionUrl =
        UrlParameter.Optional }
);

到此:

routes.MapRoute(
    name: "Section",
    url: "{sectionUrl}",
    defaults: new { controller = "Section", action = "Show" }
);

请注意,我已从sectionurl组件中删除了默认值。这很重要,因为如果sectionurl是可选的,那么访问test.com将引导您进入Section / Show,因为无参数URL将匹配该路由。强制使用此参数意味着只有具有单个段的网址才会匹配此模式。这可能仍会导致问题,但至少访问test.com仍会将您带到您的主页。

声明

与路由混淆会严重影响其他应用程序的运行方式。特别是,它可能严重破坏现有页面的导航。

我强烈建议您再看看自己在做什么,看看是否有更好的方法来达到预期效果。在不知道上下文的情况下,我必须说将URL存储在模型参数中似乎不是一个好主意。