让我解释一下我想要的很容易:
我有一个名为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 }
);
你的解决方案是什么?
感谢。
答案 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存储在模型参数中似乎不是一个好主意。