ورود

View Full Version : سوال: تغییر آدرس در Asp.Net Mvc -Routing و حذف Id در آدرس بار مرور گر - mvc routing without id



RIG000
جمعه 04 اردیبهشت 1394, 14:35 عصر
سلام
خسته نباشید. از دوستانی که تونستن تو route پروژه در Mvc تغییری ایجاد کنن که پس از درخواست ما به یک اکشن که یک ورودی Int داره ... تغییراتی ایجاد بدن که در مرور گر مقدار id رو حذف کردن و تونست صفحه رو نشون بدن ... ممنون میشم نمونه کدی برای انجام اینکار بگذارن.
البته از مسیر های مختلفی میشهاسترینگ رو تغییر داد اما من میخام دقیقا Id رو بردارم و تو مرورگر دیگه نباشه . و از constraints هم تو approute - maproute استفاده کردم بازم چیزی دستم رو نگرفت.
الان میخام مثلا
www.xxx.ir/pages/detailes/20
به
www.xxxx.ir/page/detailes/mvcjdndjsnsjsnsnjs
یا هر چیز دیگه که یا کد شده یاشه یا اینکه فقط اون id نباشه . ممنون میشم نمونه کدی دارید بگذارید.
در واقع من page و Detailes رو تونستم تغییر بدم اما فقط مشکلم Idهست. که نباشه یا یه چیز دیگه باشه و عدد نباشه .. مرسی

itsurge
شنبه 05 اردیبهشت 1394, 08:39 صبح
سلام Id نوعش int نیست و شما می توید هرچی دلتون بخواد بجاش بزارید در ضمن شما می تونید با تغییر rout موجود در app اون رو حذف یا تغییر بدین

hakim22
شنبه 05 اردیبهشت 1394, 12:00 عصر
شما در حالت پیش فرض از متد Get برای دسترسی به یک صفحه استفاده می کنید. اطلاعات id در این روش درون Route ذخیره میشوند.

به طور کلی Model Binder اطلاعاتش را از روشهای زیر بدست می آورد :

1- Route Value
2- Query String
3- Form Values

روشهای 1 و 2 در نوار آدرس همیشه چاپ میشوند ولی روش سوم اطلاعات را درون Http پنهان میکند.
برای استفاده از روش سوم باید برای نمایش اطلاعات یک صفحه از متد Post استفاده کنید.

RIG000
شنبه 05 اردیبهشت 1394, 12:24 عصر
id نوعش دقیقا int هست ..
این همون id هست که که تو دیتابیس نشسته که فلان id برای کشیده بشه و اطلاعاتش برام مشخصب بشه.
الان بطور مثال من هر id رو به متد get یک اکشن مثل detailes در کنترلر pages میدم و یکسری اطلاعات برام کشیده میشه از دیتابیس ...
حالا مشکل اینجاست که وقتی متد get اجرا میشه ... ویک id مد نظرهست . ادرس میشه این www.xxx.ir/pages/detailes/20 (http://www.xxx.ir/pages/detailes/20)
حالا تو این صفحه که هستیم اگر فقط id رو عوض کنم و مثلا بزارم 21 اطلاعات رکورد 21 برام لیست میشه مثل صفحه و هر چیز دیگه ای ....
که میخام این عمل صورت نگیره ... واسه هخین میخام مسیر www.xxx.ir/pages/detailes/20 (http://www.xxx.ir/pages/detailes/20) رو id رو رمز گذاری کنم تا دیگه با تغییر عدد رکورد یا به عبارتی صفحه دیگه ای خونده نشه ...
الان من فکر میکنم دارم الان روشی که استفاده میکنم کدام یک از موارد بالاست؟
چه راه حلی پیشنهاد میکنید؟
ایا راهی هست ؟

hakim22
شنبه 05 اردیبهشت 1394, 15:09 عصر
مقدار id همان route Value است.

اگر شما اصرار دارید که از متد Get برای نمایش اطلاعات یک صفحه استفاده کنید. (روشهای دیگری هم هست) میتوانید از ViewBag برای انتقال id از کنترلر به ویو استفاده کنید. در ویو با استفاده از یک اکشن اطلاعات را فراخوانی کنید.

در کنترلر :


[HttpGet]
public ActionResult Details(int id)
{
ViewBag.Id=id;
return View();
}


public PartialView _Details(int id)
{
var model=Db.Find(id);
return PartialView (model)

}


در ویو :

@Html.Action("MyController","Details" new {id=ViewBag.Id})