Asp.net mvc 如何在MVC5中为动态填充的页面重写URL
我只是在创建一个数据库驱动的web应用程序。为此,我创建了一个控制器:Asp.net mvc 如何在MVC5中为动态填充的页面重写URL,asp.net-mvc,model-view-controller,url-rewriting,asp.net-mvc-5,url-routing,Asp.net Mvc,Model View Controller,Url Rewriting,Asp.net Mvc 5,Url Routing,我只是在创建一个数据库驱动的web应用程序。为此,我创建了一个控制器: public class PagesController : Controller { private StoreDB db = new StoreDB(); public ActionResult LoadOneColumnPageContent(string pageId) { List<tbl_UserControl> tbl_UserControls = db.t
public class PagesController : Controller
{
private StoreDB db = new StoreDB();
public ActionResult LoadOneColumnPageContent(string pageId)
{
List<tbl_UserControl> tbl_UserControls = db.tbl_UserControl.Where(it => it.Active == true && it.PageId == pageId).OrderBy(it => it.Id).ToList();
return View(tbl_UserControls);
}
public ActionResult LoadFullWidthPageContent(int id)
{
List<tbl_UserControl> tbl_UserControls = db.tbl_UserControl.Where(it => it.Id == id).ToList();
return View(tbl_UserControls);
}
}
并在视图中显示数据:
@using Microsoft.Ajax.Utilities
@model IEnumerable<newSiteMVC.Models.tbl_UserControl>
@{
ViewBag.Title = "LoadOneColumnPageContent";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@*<%--------------------- Top Banner with moving image ---------------------%>*@
@Html.Partial("~/Views/Pages/Shared/_PageTopBanner.cshtml", Model)
@*<%--------------------- Main page content ---------------------%>*@
@foreach (var item in Model.Where(it => it.TypeId != "NewsFeed" && it.PageId == @Request.QueryString["pageId"]))
{
if ( item.TypeId != "TopBanner" && item.TypeId != "TwoColumn" && item.TypeId != "VideoPod")
{
if (string.IsNullOrEmpty(item.ImageUrl))
{
@Html.Partial("~/Views/Pages/Shared/_OneColumnComponent.cshtml", item)
}
else
{
@Html.Partial("~/Views/Pages/Shared/_OneColumnWithImageComponent.cshtml", item)
}
}
}
@if (@Request.QueryString["pageId"] == "InTheNews")
{
@Html.Partial("~/Views/Pages/Shared/_OneColumnWithLinkComponent.cshtml", Model)
}
@if (@Request.QueryString["pageId"] == "ContactUs")
{
@Html.Partial("~/Views/Pages/Shared/_FullWidthContactPage.cshtml", Model)
}
@if (@Request.QueryString["pageId"] == "ShoppingCart")
{
@Html.Partial("~/Views/Pages/Shared/_TwoColumnComponent.cshtml", Model)
}
@*<%--------------------- Moving Background Image ---------------------%>*@
@Html.Partial("_MovingBackgroundImage")
或
我想知道是否有任何方法可以使URL更加SEO友好,考虑到除了在同一控制器中使用不同操作的两个页面之外,所有页面都是通过相同的控制器和操作加载的(每个pageId显示不同的数据)。我想链接看起来像
www.somewebsite.com/News/54
www.somewebsite.com/ContactUs
www.somewebsite.com/AboutUs
有可能吗?如果有,我有什么想法可以实现吗 这不是一个完整的答案,但我想给你一个提示,因为我曾在类似的路线上工作过,这样可以使页面更加SEO友好。如果它能帮助你,你可以利用它
var route1 = routes.MapRoute(
name: "Products",
url: "Clothes/{param1}/{param2}",
defaults: new { controller = "Products", action = "Clothes", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
);
这里Param1和Param2是可选的,您可以在那里添加任何内容
就像您的情况一样,您可以添加
www.somewebsite.com/content/News/54
var route1 = routes.MapRoute(
name: "Page",
url: "Content/{param1}/{param2}",
defaults: new { controller = "Page", action = "LoadOneColumnPageContent", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
);
只能将最后一个参数标记为
UrlParameter。可选
www.somewebsite.com/News/54
www.somewebsite.com/ContactUs
www.somewebsite.com/AboutUs
var route1 = routes.MapRoute(
name: "Products",
url: "Clothes/{param1}/{param2}",
defaults: new { controller = "Products", action = "Clothes", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
);
var route1 = routes.MapRoute(
name: "Page",
url: "Content/{param1}/{param2}",
defaults: new { controller = "Page", action = "LoadOneColumnPageContent", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
);