Estou apenas criando um aplicativo da Web baseado em banco de dados. Para este propósito, criei um Controlador:
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);
}
}
Que preenche o modelo
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; }
}
E exibe os dados na Visualização:
@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")
Neste exato momento, o aplicativo da web mostra os dois seguintes padrões de url:
http://localhost:63294/Pages/LoadFullWidthPageContent/54
Ou
http://localhost:63294/Pages/LoadOneColumnPageContent?pageId=ContactUs
http://localhost:63294/Pages/LoadOneColumnPageContent?pageId=AboutUs
Eu queria saber se há alguma maneira de fazer oURL mais amigável para SEO, levando em consideração que todas as páginas são carregadas através do mesmo controlador e ação (dados diferentes são exibidos para cada pageId) além de duas páginas que usam ações diferentes no mesmo controlador. Eu gostaria que os links fossem parecidos com
www.somewebsite.com/News/54
www.somewebsite.com/ContactUs
www.somewebsite.com/AboutUs
É mesmo possível e se assim for, alguma idéia de como eu poderia implementá-lo?
Respostas:
2 para resposta № 1Esta não é uma resposta completa, mas estou tentando lhe dar uma dica, como trabalhei em tipos semelhantes de rotas, torne a página mais amigável para SEO. Se isso puder ajudar, você pode usar.
var route1 = routes.MapRoute(
name: "Products",
url: "Clothes/{param1}/{param2}",
defaults: new { controller = "Products", action = "Clothes", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional }
);
Aqui Param1 e Param2 são opcionais, você pode adicionar qualquer coisa lá.
Como no seu caso, você pode adicionar
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 }
);