我在MVC应用程序中遇到了奇怪的问题。
我有一个像这样的页面导航链接-
<a href="/Home/CardDetails?cardID=@Model.cardID">@Model.cardTitle</a>
所以我改变了它的路由使它规范,并在route.config
文件中添加了一个条目"默认"路由-
routes.MapRoute(
name: "HomeCardDetails",
url: "{controller}/{action}/{cardID}/{cardTitle}",
defaults: new { controller = "Home", action = "CardDetails", cardTitle = UrlParameter.Optional }
);
然后根据路由修改链接为-
<a href="/Home/cardDetails/@Model.cardID/@Model.cardTitle">@Model.cardTitle</a>
控制器方法——
public ActionResult CardDetails(CardModel card) {
var cardDetail = (from u in db.CardTables
where u.IsApproved == "YES" && u.CardID == card.cardID
join v in db.FunRegistereds
on u.FKCardID equals v.UserID
select new CardModel {
cardID = u.CardID,
cardHashCode = u.CardHashCode,
cardDate = u.CardDate,
cardFileName = u.CardFileName,
cardFilePath = u.CardFilePath,
cardTitle = u.CardTitle.Replace(" ","-"),
fkcardID = Convert.ToInt32(u.FKCardID),
aboutCard = u.AboutCard,
uploadedBy = u.UploadedBy == null ? "Anonymous" : u.UploadedBy,
cardspamcount = u.CardSpams == null ? 0 : Convert.ToInt32(u.CardSpams),
cardfavoritecount = u.CardFavorites == null ? 0 : Convert.ToInt32(u.CardFavorites),
cardlovecount = u.CardLoves == null ? 0 : Convert.ToInt32(u.CardLoves),
cardhatecount = u.CardHates == null ? 0 : Convert.ToInt32(u.CardHates)
}).SingleOrDefault();
if (Request.IsAuthenticated && Session["LoggedInUser"] != null) {
if (cardDetail.fkcardID == this.LoggedInUser.UserID) {
ViewBag.Username = cardDetail.uploadedBy;
}
return View(cardDetail);
}
else {
return View(cardDetail);
}
}
现在这条新路线似乎工作良好。但是视图现在不带布局了。
显示没有布局的页面。
我的actionResult类型是View
,它在渲染它时添加了viewstart.cshtml
的条目。我只是想知道为什么会这样,在这期间发生了什么?
你的布局应该声明在视图"CardDetails"的顶部,该视图有一个类型为"CardModel"的模型。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
显示完整的路由和View文件的开头。为什么要在路由中使用{cardTitle} ?是否可以使用:
routes.MapRoute(
name: "HomeCardDetails",
url: "{controller}/{action}/{cardID}",
defaults: new { controller = "Home", action = "CardDetails", cardID= UrlParameter.Optional }
);