如何将url更改为模型的属性之一

本文关键字:模型 属性 url | 更新日期: 2023-09-27 18:17:46

让我简单地解释一下我想要什么:我有一个名为Section的模型。我的section模型有一个名为UrlSafe的属性。我现在在url中显示我的urlsafes。这意味着我的url是这样的:

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

但是我现在想做的是从url中删除section/show。我想把它变成这样:

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

更多信息:

1-我在MVC3下工作

我的模型是这样的:
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; }
}

我的链接是这样的:

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

你的解决方案是什么?

谢谢。

如何将url更改为模型的属性之一

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

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将匹配该路由。将此参数设置为强制性意味着只有具有单个段的url才会匹配此模式。这可能仍然会导致问题,但至少访问test.com仍然会带您到您的主页。

免责声明

乱搞路由可能会严重影响应用程序其余部分的功能。特别是,它可能严重破坏到现有页面的导航。

我强烈建议你重新审视一下你正在做的事情,看看是否有更好的方法来达到预期的结果。在不了解上下文的情况下,我必须说在模型参数中存储URL似乎不是一个好主意。

你试过吗?

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

完全同意@Levi Botelho的评论