改变MVC中的路由,不包括布局



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

最新更新