Url Routing در ASP.Net WebForms
نویسنده: رضا منصوری
تاریخ: ۱۳۹۲/۱۱/۱۰ ۱۰:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapPageRoute("Product", "Product/{Name}", "~/Product.aspx");
} RouteTable.Routes.MapPageRoute("PostDetail", "Post/{pi}/{pt}", "~/PostShow.aspx"); <a href='<%# string.Format("/Post/{0}/{1}",Eval("PostID"),Eval("PostTitle").ToString().Replace(" ","-")) %>'> Post/12/چگونه-طراحان-وب-به-جهنم-می-روند!؟
int pi = int.Parse(Page.RouteData.Values["pi"].ToString()); Posts post = (from p in con.Posts where p.PostID == pi select p).FirstOrDefault();
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
AutoGenerateWhereClause="True" ConnectionString="name=WebWorkEntities"
DefaultContainerName="WebWorkEntities" EnableFlattening="False"
EntitySetName="Posts" EntityTypeFilter="Posts" Where="" Select="">
<WhereParameters>
<asp:RouteParameter Name="PostID" RouteKey="pi" DbType="Int32"
DefaultValue="0" />
</WhereParameters>
</asp:EntityDataSource> protected void Application_Start(object sender, EventArgs e)
{
RoutingSite(RouteTable.Routes);
}
public static void RoutingSite(RouteCollection route)
{
route.MapPageRoute("PostDetail", "Post/{pi}/{pt}", "~/PostShow.aspx");
route.MapPageRoute("RouteAbout", "About-Me", "~/About.aspx");
} RouteTable.Routes.MapPageRoute("Folder", "ShowFolder/{Id}/{Name}", "~/Admin/Show.aspx"); routes.MapPageRoute("defaultRoute", "{*value}", "~/folder/default.aspx"); <a href='<%# string.Format("../ShowFolder/{0}/{1}", Eval("Id") ,Eval("Name").ToString().Replace(" ", "-")) %>' ><%# Eval("Name") %></a> بازم ممنون. فقط یه سوال دیگه. فرض کنید من یه چیزی به آدرس اصلی صفحه اضافه کردم. حالا میخوام به این آدرس جدید دوباره یه چیز دیگه اضافه کنم. باید چی کار کنم؟ اینجا وقتی یک یا چند تا چک لیست انتخاب میشه یا مثلا چیزی از لیست باکسها انتخاب میشه عبارت مربوطه اش به آدرس اضافه میشه. چطوری این کارو کرده؟ اینجوری که آدرس ثابت نیست و میتونه حالتهای مختلفی داشته باشه! یا مثلا وقتی یک مورد انتخاب شده حذف میشه چطوری عبارت مربوطه اش از وسط آدرس حذف میشه؟!
RouteTable.Routes.MapPageRoute("Post", "Post/{Id}/{title}", "/~showpost.aspx"); var id = Page.RouteData.Values["id"];
var title = Page.RouteData.Values["title"];
var blogPost = _postsService.FindPost(id);
if(blogPost == null)
{
Response.RedirectPermanent("~/notfound");
}
if(blogPost.Title != title)
{
Response.RedirectPermanent("~/post/" + id + "/" + blogPost.Title);
} route.MapPageRoute("PostDetail", "Post/{pi}/{pt}", "~/PostShow.aspx"); <system.web>
<httpHandlers>
<remove verb="*" path="*.aspx" />
<add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler" />
</httpHandlers>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add name="BlockViewHandler" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer> The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. Requested URL: /Default.aspx
routes.MapPageRoute("Default", "", "~/default.aspx", False) <script type='text/javascript' src='<%= ResolveUrl("~/Scripts/test.js") %>'></script> <link rel="stylesheet" href="<%= ResolveUrl("~/myStylysheet.css")%>" type="text/css" /> Page.RouteData.Values("pi").ToString() var id = Page.RouteData.Values["pi"].ToString();
Me.Request.RequestContext.RouteData.Values("pi") Object reference not set to an instance of an object.
<img src='<%=ResolveUrl("~/images/brain.png")%>' />
<asp:ImageButton ID="ImageButton1" ImageUrl="~/images/brain.png" runat="server" />
<asp:Image runat="server" ID="imgHelp" ImageUrl="~/Images/myImage.jpg" /> <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{URL}" negate="true" pattern="\.png$" />
</conditions>
</rule> // using System.Web.Routing; //Must Be Added
public static void RoutingSite(RouteCollection route)
{
//تعریف Route
route.MapPageRoute("Admin", "Admin", "~/admin/add.aspx");
}
protected void Application_Start(object sender, EventArgs e)
{
RoutingSite(RouteTable.Routes);
} public static void RoutingSite(System.Web.Routing.RouteCollection route)
{
//تعریف Route
route.MapPageRoute("Admin", "AdminAdd", "~/admin/add.aspx");
}
protected void Application_Start(object sender, EventArgs e)
{
RoutingSite(System.Web.Routing.RouteTable.Routes);
} RouteTable.Routes.MapPageRoute("Gallery", "{PageName In Database}", "~/Main.aspx"); RouteTable.Routes.MapPageRoute("Gallery", "Page/{PageName}", "~/Main.aspx"); string pi = Page.RouteData.Values["PageName"] + "" ;
Pages page = (from p in context.Pages where p.PageName == pi select p).FirstOrDefault();
if (page == null )
Response.Redirect("/");
else
// نمایش اطلاعات RouteTable.Routes.MapPageRoute("Gallery", "{PageName}", "~/Main.aspx"); <a href="article/da/name">...</a>
localhost://article/da/name
<a href="about">...</a>
localhost://article/da/about
localhost:56254/type/Brand/سمپلر/متغیر/5 میکرولیتر با سرنگ اضافه
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=mainfardbEntities"
DefaultContainerName="mainfardbEntities" EnableFlattening="False"
EntitySetName="T_Product" Where="it.[CoName]=@category and it.[CatName]=@sub and it.[SubCatName]=@thi and it.[ProdName]=@det">
<WhereParameters>
<asp:QueryStringParameter DbType="String" Name="category" QueryStringField="category" />
<asp:QueryStringParameter DbType="String" Name="sub" QueryStringField="sub" />
<asp:QueryStringParameter DbType="String" Name="thi" QueryStringField="thi" />
<asp:QueryStringParameter DbType="String" Name="det" QueryStringField="det" />
</WhereParameters>
</asp:EntityDataSource> <rewrite url="~/type/(.+)/(.+)/(.+)/(.+)" to="~/type/Product-Details.aspx?category=$1&sub=$2&thi=$3&det=$4" />
var url = "<a href='http://site/page/" + Uri.EscapeDataString(item.Category) + "'>Item1</a>";
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("NewsID", "ShowNews.aspx?id={0}")+ Eval("NewsTitle","&_title={0}").ToString().Replace(" ","_")%>' http://localhost:28625/ShowNews.aspx?id=25&_title=%D8%A2%D8%AE%D8%B1%DB%8C%D9%86_%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1_%D8%A7%D8%B2_%22%D9%85%D8%B1%D8%AA%D8%B6%DB%8C_%D9%BE%D8%A7%D8%B4%D8%A7%DB%8C%DB%8C%22__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
SqlDataSource1.SelectParameters.Add("@param1", value1); <%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
System.Web.Routing.RouteTable.Routes.MapPageRoute("NewsDatils", "News/{pi}/{pt}", "~/ShowNews.aspx");
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
} <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# string.Format("/News/{0}/{1}",Eval("NewsID"),Eval("NewsTitle").ToString().Replace(" ","-")) %>' Text='<%# Eval("NewsTitle") %>'></asp:HyperLink> int p = int.Parse(Page.RouteData.Values["pi"].ToString());
Cannot use a leading .. to exit above the top directory.
<asp:Image ImageUrl="..\foo.jpg" />
localhost:28625/News/26/~/default.aspx
<a href=<%= ResolveUrl("~") %> >Home</a>
<a href="/" >Home</a> NavigateUrl='<%# string.Format("/News/{0}/{1}",Eval("NewsID"),Eval("NewsTitle").ToString().Replace(" ","-") Replace(" ","-") استاتیک بودن ربطی به تغییر ناپذیری (immutable) یک متغیر ندارد. متغیرهای استاتیک mutable هستند. بحث اطلاعات singleton متفاوت هستند با بحث static بودن. هر استاتیکی singleton نیست.
مسیریابیها در ASP.NET طوری طراحی شدن که یکبار که در application_start برنامه خونده شدن، دیگه قابل تغییر نیستند. این مورد به طراحی این سیستم بر میگرده. بنابراین، خوندن اونها در سشنهای مختلف، هیچ مشکل تداخلی به همراه نداره، چون قرار نیست اینجا اطلاعاتی تغییر کنه. صرف خوندن اطلاعات تغییر ناپذیر، مشکل تداخل تردها رو نداره (یکبار قبلا در application_start کار مقدار دهی اونها انجام و تموم شده).
ضمنا میشه مسیریابیها رو در زمان اجرا تغییر داد، باید کل سیستم اون یکبار منقضی و بعد ریلود بشه: http://haacked.com/archive/2010/01/17/editable-routes.aspx/
نمیتونید لیست روتینگها رو در زمان اجرا و پس از start دستکاری کنید (اینطوری طراحی شده). در مورد کار با ساب دومین مطلب در سایت هست: آموزش ساخت و کار با subdomain در حالت لوکال هاست
ضمنا میشه یک برنامهی asp.net رو در app domainهای جداگانهای اجرا کرد (با تنظیمات مسیریابی جدا و مخصوص هر کدام). برای اینکار فقط کافی هست که یک application pool جداگانه به ازای هر مشتری درست کنید.
ResolveUrl("/news/12/newstitle") The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. Requested URL: /Service/1/ewr/
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute( "Service" , "Service/{ID}/{ProductTitle}" , "~/Service.aspx" );
}
void Application_Start( object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
} <asp:HyperLink ID= "HyperLink2" runat= "server" NavigateUrl= '<%# string.Format("/Service/{0}/{1}", Eval("ProductID") ,Eval("ProductTitle").ToString().Replace(" ", "-")) %>' /> protected void LinqDataSource1_Selecting( object sender, LinqDataSourceSelectEventArgs e)
{
int ID = int .Parse(Page.RouteData.Values[ "ID" ].ToString());
e.Result = db.Product.Where(p => p.ProductID == ID).FirstOrDefault();
}