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 

它甚至有可能,如果這樣任何想法如何,我可以實現它?

回答

2

這是不完整的答案,但想給你一個提示,由於我的工作類似那種路線使頁面更加搜索引擎友好。如果它可以幫助您可以利用的。

  var route1 = routes.MapRoute(
      name: "Products", 
      url: "Clothes/{param1}/{param2}", 
      defaults: new { controller = "Products", action = "Clothes", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional } 
      ); 

這裏參數1和參數都是可選的,你可以有添加任何東西。

像你的情況,你可以添加

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 } 
      ); 
+0

這真是棒極了! :) – user3845868

+0

只有最後一個參數可以被標記'UrlParameter.Optional' –