PDA

View Full Version : سوال: چگونگی دسترسی به مقدار یک پارامتر در آدرس صفحه



fotrosi
یک شنبه 10 شهریور 1392, 06:58 صبح
با سلام خدمت دوستان عزیز
من یک اکشن لینک دارم به شکل زیر :

<%= Html.ActionLink("Simple List", "Index","MvcViewer", new { id = "1", p2 = "200" },new object())%>

انتهای آدرس صفحه ای که لینک فوق به آن اشاره خواهد کرد به صورت زیر است:

MvcViewer/Index/1?p2=200

حالا می خواهم به مقدار p2 در اکشن کنترل دسترسی پیدا کنم ولی نتوانستم، لطفا راهنمایی بفرمایید.
از Request["p2"] هم استفاده کردم ولی جواب نداد.

hakim22
یک شنبه 10 شهریور 1392, 08:49 صبح
بدون شرح !


View :
Html.ActionLink("Simple List", "Index","MvcViewer", new { id = "1", p2 = "200" },null)

controller :

public ActionResult MyAction(int id,string p2)
{
//--- read id , p2
}

fotrosi
یک شنبه 10 شهریور 1392, 19:43 عصر
ممنون از جواب تون جناب hakim22
مشکل من اینجاست که این اکشن کنترل برای استیمول ریپورت است و وقتی پارامتر براش می گذارم دیگه اکشن کنترلرش اجرا نمی شود اگه راه دیگری داره ممنون می شوم. کلا می خواهم برای گزارشم پارامتر ارسال کنم.

hakim22
یک شنبه 10 شهریور 1392, 20:17 عصر
یک راه ساده

در اکشن کنترل میشود از


public ActionResult MyAction()
{
var id= RouteData.Values("id")
var p=RouteData.Values("p")
return --- whatever---
}


برای خواندن اطلاعات استفاده کرد. به شرطی که قبلا در فایل RouteConfig.cs رفته و یک روت جدید ثبت کنید.
این روت باید بالاتر از روت پیشفرض که با نام Default در متد RegisterRoutes قرار بگیرد.


routes.MapRoute(
name:"myStimulReport",
url:"Home/MyAction/{id}/{p}",
defaults:new {controller="Home" , action="MyAction",id=UrlParameter.Optional,p=UrlParameter.Optional}
);


لازم نیست Html.ActionLink که قبلا گفتم رو تغییر بدید.

Html.ActionLink("Simple List", "Index","MvcViewer", new { id = "1", p = "200" },null)


چون همه چیز به صورت تکست و string است اشتباه تایپی نکنید. همه جا id و p باید یکسان نوشته شوند.

fotrosi
یک شنبه 10 شهریور 1392, 20:37 عصر
خیلی ممنونم hakim22 عزیز. راه شما به نظر کاملا درست می آید یه راه هم به نظر خودم رسید نمی دونم کدوم بهتره ولی می گذارم شاید به کار کسی بیاد. چون امکان داره که پارامترهای گزارشم بیشتر بشه و ... در نتیجه این راه هم به نظر خوبه:

Uri ur = new Uri(Request.UrlReferrer.OriginalString);
System.Collections.Specialized.NameValueCollection qscoll = HttpUtility.ParseQueryString(ur.Query);
string p2= qscoll["p2"].ToString();

حالا اگه پارامتر دیگه هم داشته باشیم پاس دادنش راحته و نیازی به تنظیمات روت نیست