/ / डायनामिक रूप से आबादी वाले पृष्ठों के लिए MVC 5 में URL को फिर से कैसे लिखें

गतिशील रूप से आबादी वाले पृष्ठों के लिए एमवीसी 5 में यूआरएल को फिर से लिखना कैसे करें - asp.net-mvc, model-view-controller, url-rewriting, asp.net-mvc-5, url-routing

मैं केवल एक डेटाबेस संचालित वेब एप्लिकेशन बना रहा हूं। इस उद्देश्य के लिए मैंने एक नियंत्रक बनाया:

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

इस क्षण वेब एप्लिकेशन दो निम्न यूआरएल पैटर्न दिखाता है:

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

या

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

मैं सोच रहा था कि क्या कोई रास्ता हैURL अधिक SEO फ्रेंडली, यह ध्यान में रखते हुए कि सभी पेज एक ही कंट्रोलर और एक्शन के माध्यम से लोड किए गए हैं (प्रत्येक पेज के लिए अलग-अलग डेटा प्रदर्शित होता है) इसके अलावा दो पेज एक ही कंट्रोलर में अलग-अलग एक्शन का उपयोग करते हैं। मैं लिंक की तरह दिखना चाहूंगा

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

क्या यह भी संभव है और यदि कोई विचार है तो मैं इसे कैसे लागू कर सकता हूं?

उत्तर:

जवाब के लिए 2 № 1

यह पूर्ण उत्तर नहीं है, लेकिन आपको एक संकेत देने की कोशिश कर रहा है, जैसा कि मैंने इसी तरह के मार्गों पर काम किया है जो पृष्ठ को अधिक एसईओ अनुकूल बनाते हैं। अगर यह मदद कर सकता है आप का उपयोग कर सकते हैं।

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