PDA

View Full Version : سوال: در مورد URL Rewriting و Route



orca13
چهارشنبه 15 شهریور 1391, 20:40 عصر
سلام!
من تمام تاپیک های مربوط به آموزش رو توی سایت خوندم، آخرم نفهمیدم باید چجوری ازین روش استفاده کنم!

اگه لطف کنید در مورد تغییرنام صفحاتی ک در روت هستند (مثلا Default و Contact و...) توضیح بدید، چجوری باید عمل کنم.
به طور مثال من واسه Default.aspx در Global.asax اینجوری نوشتم:

void registerRoute(RouteCollection routes)
{
RouteTable.Routes.MapPageRoute("", "Home", "~/Default.aspx");
}
void Application_Start(object sender, EventArgs e)
{
registerRoute(RouteTable.Routes);


و چیزی ک واسم مهمتره:
من یه صفحه دارم به نام User.aspx، داخلش یه سری کنترل هستش ک اطلاعات کاربران رو (براساس اسمشون ک از طریق Query string فرستاده میشه) نمایش میده. User.aspx?user=USERNAME

در صفحه اول سایت، یه GridView گذاشتم ک لیست کاربران ثبت نام شده رو نمایش میده (به صورت یک HyperLink) ک با کلیک روی هر نام به همین صفحه User ارجاع داده میشه (به همراه Query string مختص به خودش). حالا میخوام آدرس www.mydomain.com/User.aspx?user=USERNAME (http://www.mydomain.com/User.aspx?user=USERNAME) به www.mydomain.com/USERNAME (http://www.mydomain.com/USERNAME) تبدیل بشه.
ممنون میشم توضیح کامل بدین.

sanaz.dadkhah
چهارشنبه 15 شهریور 1391, 22:13 عصر
اینو ببین به کارت میاد
کد پروجکت (http://www.codeproject.com/Articles/2538/URL-Rewriting-with-ASP-NET)
برنامه نویس (http://barnamenevis.org/showthread.php?225081-URL-Rewriting-in-ASP.NET)

meysam99
چهارشنبه 15 شهریور 1391, 23:59 عصر
از این کد استفاده کن

RouteTable.Routes.MapPageRoute("user", "{user}/", "~/user.aspx");

خروجی همان کدی می شود که می خواهی
www.mydomain.com/USERNAME (http://www.mydomain.com/USERNAME)

orca13
پنج شنبه 16 شهریور 1391, 12:14 عصر
ممنون از راهنماییتون، اما هیچ اتفاق خاصی نمیوفته!

اگه امکانش هست، تمام تغییراتی ک لازمه بدم رو بگید.

واینکه دقیقا اون 3 تا آرگومان که تابع MapPageRoute میگیره به چه معناست؟

ممنون

meysam99
پنج شنبه 16 شهریور 1391, 13:06 عصر
ممنون از راهنماییتون، اما هیچ اتفاق خاصی نمیوفته!

اگه امکانش هست، تمام تغییراتی ک لازمه بدم رو بگید.

واینکه دقیقا اون 3 تا آرگومان که تابع MapPageRoute میگیره به چه معناست؟

ممنون
قسمت اول یک نام که برای صدا زدن از اون استفاده می کنید.
قسمت دوم url مورد نظر شماست. پارامترهای ارسالی هم در {} قرار میگیرند.
قسمت سوم هم مسیر اصلی می باشد.
با این صورت به صفحه مورد نظر خود بروید ببیند کار می کند.
Response.RedirectToRoute("user", new { user= "USERNAME" });
با این کد هم می توانید مقدار پارامتر ارسالی را بگیرید.
Page.RouteData.Values["user"]
من الان در کل پرژم دارم استفاده میکنم و خیلی هم خوب کار می کنه

orca13
پنج شنبه 16 شهریور 1391, 13:34 عصر
meysam99 عزیز، دستت درد نکنه! درست شد.

فقط یه لطفی بکن، در مورد صفحاتی مثل Default هم توضیح بده، ممنون میشم. (منظورم صفحاتی هست ک بدون Query string نمایش داده میشن)

و منظورم در مورد اون سه آرگومان، توضیح نحوه نوشتن یا همون syntax هستش، مثلا {user} به چی اشاره میکنه؟ مدل دیگه هم میشه نوشت؟
یا اگه صفحه مورد نظر توی یک فولدر باشه، چجوری باید نوشته بشه؟ و ...

خیلی ممنون

meysam99
پنج شنبه 16 شهریور 1391, 14:13 عصر
meysam99 عزیز، دستت درد نکنه! درست شد.

فقط یه لطفی بکن، در مورد صفحاتی مثل Default هم توضیح بده، ممنون میشم. (منظورم صفحاتی هست ک بدون Query string نمایش داده میشن)

و منظورم در مورد اون سه آرگومان، توضیح نحوه نوشتن یا همون syntax هستش، مثلا {user} به چی اشاره میکنه؟ مدل دیگه هم میشه نوشت؟
یا اگه صفحه مورد نظر توی یک فولدر باشه، چجوری باید نوشته بشه؟ و ...

خیلی ممنون
صفحات بدون کوئری استرینگ هم همنطوری هستند فقط قسمت دوم احتیاجی به {} نداره
{user} مثل همون کوئری استرینگ هست که استفاده می کنی و مقدارش رو هم با
Page.RouteData.Values["user"]


دریافت می کنی
به نظر من برای راحتی کار همه آدرسها رو یک شکل بکن

مثلا قسمت دوم رو انطوری بنویس {locale}/{PageId}/ViewProduct/{ViewProduct}/
باز بستگی به تعداد پارامترهای ارسالی و نوع پروژتون داره
مسیر داخل پوشه اصلا مهم نیست اون در قست سمت نوشته میشه.
RouteTable.Routes.MapPageRoute("user", "{user}/{PageId}", "~/folder/user.aspx");

orca13
پنج شنبه 16 شهریور 1391, 14:39 عصر
الان من واسه صفحه default این جوری نوشتم و تو page_load صفحه default از Respone.RedirectToRoute استفاده کردم، کار میکنه، راهش همینه دیگه، آره؟
RouteTable.Routes.MapPageRoute("home", "Default", "~/Default.aspx");

و یه سوال، شما تو چندتا پست بالاتر گفتی که از Respone.RedirectToRoute استفاده کنم ک درست شد.
حالا صفحاتی که مثلا تو منو هستند و یا از تگ a برای لینک دادن بهشون استفاده شده، چجوری باید براشون از route استفاده کنم؟

منظورتم از اینکه همه آدرس هارو به یک شکل بکنم، متوجه نشدم.

ویرایش:
title صفحاتی ک ازاین ر.ش استفاده کردم، درست نشون داده نمیشه، باید از طریق کدنویسی دوباره title رو ست کنم؟ یا راه حله دیگه ای داره؟

ممنون

meysam99
پنج شنبه 16 شهریور 1391, 14:50 عصر
الان من واسه صفحه default این جوری نوشتم و تو page_load صفحه default از Respone.RedirectToRoute استفاده کردم، کار میکنه، راهش همینه دیگه، آره؟
RouteTable.Routes.MapPageRoute("home", "Default", "~/Default.aspx");


و یه سوال، شما تو چندتا پست بالاتر گفتی که از Respone.RedirectToRoute استفاده کنم ک درست شد.
حالا صفحاتی که مثلا تو منو هستند و یا از تگ a برای لینک دادن بهشون استفاده شده، چجوری باید براشون از route استفاده کنم؟

منظورتم از اینکه همه آدرس هارو به یک شکل بکنم، متوجه نشدم.

ممنون

بله راهش همینه
برای اون منو ها هم میتونی مسیر url رو بنویسی درست کار می کنه

orca13
پنج شنبه 16 شهریور 1391, 15:05 عصر
مشکل در مورد title
و هم اینکه الان محتویات صفحه default یا login نشون داده نمیشه،
رو لطفا توضیح میدین، باید چکارکنم؟

meysam99
جمعه 17 شهریور 1391, 12:55 عصر
مشکل در مورد title
و هم اینکه الان محتویات صفحه default یا login نشون داده نمیشه،
رو لطفا توضیح میدین، باید چکارکنم؟
عنوان صفحه که هیچ فرقی با قبل نکرده
محتوایت اون دو صفحه هم باید نشون بده.
کاری با محتویات نداشتیم

orca13
جمعه 17 شهریور 1391, 17:01 عصر
نمیدونم.
اما الان محتویات نشون داده نمیشه و title کلا مثل وقتی شده ک title ای تعریف نشده.

ضمنا من ی سوال دارم، وقتی دستور redirect رو توی page_load بنویسیم، چجوریه ک توی loop نمیوفته؟ (هردفه صفحه load میشه، پس باید مدام این متد صدا زده بشه)

orca13
یک شنبه 19 شهریور 1391, 13:38 عصر
دوستان اگه میشه برای این مشکل یه راهنمایی بکنید.

ممنون