/ / Jak przepisać URL w MVC 5 dla stron dynamicznie zapełnionych - asp.net-mvc, model-view-controller, przepisywanie URL, asp.net-mvc-5, routing url

Jak przepisać URL w MVC 5 dla dynamicznie wypełnianych stron - asp.net-mvc, model-view-controller, url-przepisywanie, asp.net-mvc-5, routing URL

Właśnie tworzę aplikację internetową opartą na bazie danych. W tym celu stworzyłem kontroler:

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

Który wypełnia model

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; }
}

I wyświetla dane w widoku:

    @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")

W tej chwili aplikacja internetowa pokazuje dwa następujące wzorce adresów URL:

http://localhost:63294/Pages/LoadFullWidthPageContent/54

Lub

http://localhost:63294/Pages/LoadOneColumnPageContent?pageId=ContactUs
http://localhost:63294/Pages/LoadOneColumnPageContent?pageId=AboutUs

Zastanawiałem się, czy jest jakikolwiek sposób na zrobienie tegoURL bardziej przyjazny dla SEO, biorąc pod uwagę, że wszystkie strony są ładowane za pomocą tego samego kontrolera i akcji (różne dane są wyświetlane dla każdej strony) oprócz dwóch stron, które używają innej akcji w tym samym kontrolerze. Chciałbym, żeby linki wyglądały tak

 www.somewebsite.com/News/54
www.somewebsite.com/ContactUs
www.somewebsite.com/AboutUs

Czy to w ogóle możliwe, a jeśli tak, jakieś pomysły, jak mogę to wdrożyć?

Odpowiedzi:

2 dla odpowiedzi № 1

Nie jest to pełna odpowiedź, ale próbuję dać ci wskazówkę, ponieważ pracowałem nad podobnymi rodzajami tras, aby strona była bardziej przyjazna dla SEO. Jeśli to może pomóc, możesz skorzystać z.

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

Tutaj Param1 i Param2 są opcjonalne, możesz dodać tam wszystko.

Podobnie jak w twoim przypadku, możesz dodać

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