3
我只是在创建数据库驱动的Web应用程序。为了这个目的,我创建了一个控制器:如何重写URL在MVC 5动态填充网页
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);
}
}
其中填充型
public partial class tbl_UserControl
{
private int? _priority;
[Key]
public int Id { get; set; }
[AllowHtml]
public string Title { get; set; }
[AllowHtml]
public string Subtitle { get; set; }
[AllowHtml]
[DataType(DataType.MultilineText)]
public string MainText { get; set; }
[StringLength(20)]
public string ButtonText { get; set; }
public string ImageUrl { get; set; }
public string UrlLink { get; set; }
public string PageId { get; set; }
public string TypeId { get; set; }
}
并在视图显示数据:
@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")
在这个非常时刻的Web应用程序显示以下两个URL模式:
http://localhost:63294/Pages/LoadFullWidthPageContent/54
或者
http://localhost:63294/Pages/LoadOneColumnPageContent?pageId=ContactUs
http://localhost:63294/Pages/LoadOneColumnPageContent?pageId=AboutUs
我想知道是否有什么办法可以让URL更加SEO友好的,因为考虑到所有页面都通过相同的控制器和动作加载(不同的数据将显示每个PAGEID)除了帐户两个页面在同一个控制器中使用不同的操作。我想的链接,看起来像
www.somewebsite.com/News/54
www.somewebsite.com/ContactUs
www.somewebsite.com/AboutUs
它甚至有可能,如果这样任何想法如何,我可以实现它?
这真是棒极了! :) – user3845868
只有最后一个参数可以被标记'UrlParameter.Optional' –