如何将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 }
);
你的解决方案是什么?
谢谢。
原则上你只需要改变这个:
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的评论