مخفی کردن کوئری استرینگها در ASP.NET MVC توسط امکانات Routing
نویسنده: وحید نصیری
تاریخ: ۱۳۹۱/۱۲/۱۵ ۱۱:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using System.Collections.Generic;
namespace TestRouting.Models
{
public class Issue
{
public int IssueId { set; get; }
public int ProjectId { set; get; }
public string Title { set; get; }
public string Body { set; get; }
}
public static class IssuesDataSource
{
public static IList<Issue> CreateDataSource()
{
var results = new List<Issue>();
for (int i = 0; i < 100; i++)
{
results.Add(new Issue { IssueId = i, ProjectId = i, Body = "Test...", Title = "Title " + i });
}
return results;
}
}
}using System.Linq;
using System.Web.Mvc;
using TestRouting.Models;
namespace TestRouting.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
var issuesList = IssuesDataSource.CreateDataSource();
return View(issuesList); //show the list
}
public ActionResult Details(int issueId, int projectId)
{
var issue = IssuesDataSource.CreateDataSource()
.Where(x => x.IssueId == issueId && x.ProjectId == projectId)
.FirstOrDefault();
return View(issue);
}
}
}@model IEnumerable<TestRouting.Models.Issue>
@{
ViewBag.Title = "Index";
}
<h2>
Issues</h2>
<ul>
@foreach (var item in Model)
{
<li>
@Html.ActionLink(linkText: item.Title,
actionName: "Details",
controllerName: "Home",
routeValues: new { issueId = item.IssueId, projectId = item.ProjectId },
htmlAttributes: null)
</li>
}
</ul>http://localhost:1036/Home/Details?issueId=0&projectId=0
http://localhost:1036/Home/Details/0/0
using System.Web.Mvc;
using System.Web.Routing;
namespace TestRouting
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "IssueDetails",
url: "Details/{issueId}/{projectId}", //تطابق با یک چنین مسیرهایی
defaults: new
{
controller = "Home", //کنترلری که این نوع مسیرها را پردازش خواهد کرد
action = "Details", // اکشن متدی که نهایتا پارامترها را دریافت میکند
issueId = UrlParameter.Optional, //این خواص نیاز است هم نام پارامترهای اکشن متد تعریف شوند
projectId = UrlParameter.Optional
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}http://localhost:1036/Home/Details/0/0
url: "Details/{projectId}"@Html.ActionLink("detail","Details",new {issueId=10,projectId=11})Details/{projectId}/{issueId}
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script language="javascript" src='<%=ResolveUrl("~/App_Themes/MainTheme/jquery.js")%>' type='text/javascript'></script> <head runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/js/somefile.js" />
</Scripts>
</asp:ScriptManager> این راه حل برای area admin جواب نمیدهد , هر کاری میکنم مشکل حل نمیشه ...
public virtual ActionResult Manage(int ? page) {...}in Routeconfig.cs
routes.MapRouteLowercase( name: "myroute", url: "Manage/{page}", //تطابق با یک چنین مسیرهایی defaults: new { controller = "Post", //کنترلری که این نوع مسیرها را پردازش خواهد کرد action = "Manage", // اکشن متدی که نهایتا پارامترها را دریافت میکند page = UrlParameter.Optional //این خواص نیاز است هم نام پارامترهای اکشن متد تعریف شوند } );
Or in AdminAreaRegistration
context.MapRouteLowercase( name: "myroute", url: "Manage/{page}", //تطابق با یک چنین مسیرهایی defaults: new { controller = "Post", //کنترلری که این نوع مسیرها را پردازش خواهد کرد action = "Manage", // اکشن متدی که نهایتا پارامترها را دریافت میکند page = UrlParameter.Optional //این خواص نیاز است هم نام پارامترهای اکشن متد تعریف شوند } );
context.MapRouteLowercase(
"Admin_default2",
"Admin/Post/Manage/{page}",
new { controller = "Post", action = "Manage", page = UrlParameter.Optional }
);