aroshanzamir
یک شنبه 13 مهر 1393, 23:31 عصر
سلام دوستان
این Route را در نظر بگیرید :
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{*catchall}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
چون سگمنت آخر را catchall* معرفی کردیم هر نوع آدرسی را می توانیم پذیرش کنیم تمام سگمنت های بعد از id همه به catchall اختصاص پیدا می کند
وباید به روش های برنامه نویسی آن ها را از هم جدا کنیم
مثلا :
example.com/Home/Index/10
Controller : Home , action :Index , id:10
Or
example.com/Home/Index/All/Delete/Pern
Controller :Home , actionn :Index , id:All , Catchall:Delete/Pern
طبق گفته کتاب آقای بهروز راد باید برنامه نویسی مثلا split این ها را از هم جدا کنید
فرض کنید این متد اکشن را داریم :
public ActionResult Edit(int id)
{
object obj = RouteData.Values["catchall"];
return View();
اگر به صورت مستقیم در آدرس بار این آدرس را تایپ کنیم example.com/Home/Index/All/Delete/Pern ... این دو Delete/Pern در obj قرار میگیرند که ما با split از هم جدا می کنیم
مشکل اینجاست که مثلا اگر من بیام یه اکشن لینک بزارم رو صفحه و routeValue را طبق زیر مقدار دهی کنم مقدار name را به صورت کوئری استرینگ نمایش میدهد و در کل مقدار catchall هم null می باشد
چکار کنیم که مثل تایپ مستقیم آدرس در آدرس بار عمل کنه و کوئری استرینگ ایجاد نکنه ؟
@Html.ActionLink("Edit", "Edit", new { id = item.Id, name="reza" })
آدرس بار : http://localhost:4448/Home/Edit/14?name=reza
این Route را در نظر بگیرید :
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{*catchall}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
چون سگمنت آخر را catchall* معرفی کردیم هر نوع آدرسی را می توانیم پذیرش کنیم تمام سگمنت های بعد از id همه به catchall اختصاص پیدا می کند
وباید به روش های برنامه نویسی آن ها را از هم جدا کنیم
مثلا :
example.com/Home/Index/10
Controller : Home , action :Index , id:10
Or
example.com/Home/Index/All/Delete/Pern
Controller :Home , actionn :Index , id:All , Catchall:Delete/Pern
طبق گفته کتاب آقای بهروز راد باید برنامه نویسی مثلا split این ها را از هم جدا کنید
فرض کنید این متد اکشن را داریم :
public ActionResult Edit(int id)
{
object obj = RouteData.Values["catchall"];
return View();
اگر به صورت مستقیم در آدرس بار این آدرس را تایپ کنیم example.com/Home/Index/All/Delete/Pern ... این دو Delete/Pern در obj قرار میگیرند که ما با split از هم جدا می کنیم
مشکل اینجاست که مثلا اگر من بیام یه اکشن لینک بزارم رو صفحه و routeValue را طبق زیر مقدار دهی کنم مقدار name را به صورت کوئری استرینگ نمایش میدهد و در کل مقدار catchall هم null می باشد
چکار کنیم که مثل تایپ مستقیم آدرس در آدرس بار عمل کنه و کوئری استرینگ ایجاد نکنه ؟
@Html.ActionLink("Edit", "Edit", new { id = item.Id, name="reza" })
آدرس بار : http://localhost:4448/Home/Edit/14?name=reza