PDA

View Full Version : Route در MVC



ali_72
چهارشنبه 18 آذر 1394, 12:22 عصر
سلام

من یه اکشن نوشتم و پارامتر id را optinal گذاشتم
اگه id گروه null باشه همه محصولات میاد
و اگه نال نباشه محصولات اون گروه میاد

این ها به تنهایی مشکلی ندارند
ولی اگه من در سایت لینکی را کلیک کنم که id گروه داشته باشه
بعد از اون بخوام لینک کل محصولات رو کلیک کنم که بدون پارامتر id است
ولی باز هم در آدرس مرورگر id رو میبینم و دیگه نمیتونه کل محصولات رو بیاره

باید به یه لینک دیگه برم بعدش به لینک کل محصولات که id نال داره برگردم

امیدوارم منظورم رو خوب گفته باشم

لطفا راهنمایی کنید
ممنون

hadi0x7c7
چهارشنبه 18 آذر 1394, 19:09 عصر
کدتون رو بزارید ببینیم چی نوشتید و همچنین route ها رو

ali_72
یک شنبه 22 آذر 1394, 07:34 صبح
کدتون رو بزارید ببینیم چی نوشتید و همچنین route ها رو


public virtual async Task<ActionResult> Index(string group, Guid? id) {
IQueryable<Mahsolat> mahsol = db.Mahsolat;
if (id != null)
mahsol = mahsol.AsNoTracking().Where(b => b.IdGoroh == id);


return View(await mahsol.ToListAsync());
}


routes.MapRoute( name: "ListMahsolat",
url: "Mahsolat/Index/{group}/{id}", //تطابق با یک چنین مسیرهایی
defaults: new
{
controller = "Mahsolat", //کنترلری که این نوع مسیرها را پردازش خواهد کرد
action = "Index", // اکشن متدی که نهایتا پارامترها را دریافت می‌کند
group = UrlParameter.Optional,
id = UrlParameter.Optional //این خواص نیاز است هم نام پارامترهای اکشن متد تعریف شوند
}
);

خوب اگه بار اول رو لینک نمایش همه گروه ها کلیک کنم مشکلی نیست

ولی اگه بار دوم روی لینک گروه خاص کلیک کنم
و بعدش رو لینک همه محصولات کلیگ کنم دیگه id گروه نال نمیشه


<a href="@Url.Action(MVC.Mahsolat.ActionNames.Index, MVC.Mahsolat.Name,null)">

همه محصولات
</a>

ali_72
شنبه 28 آذر 1394, 07:31 صبح
هیچ کس تا حالا به این مورد برخورد نکرده؟
مجبور شدم برای این دو تا دو تا اکشن جدا بذارم :افسرده:

بهترین کار همینه؟

r4hgozar
شنبه 28 آذر 1394, 11:12 صبح
نه.
باید ورودی رو چک کنید.
route defult هم حتما باید وجود داشته باشه.
من دقیقا نتونستم مشکلتون رو متوجه بشم اما خودم این کار رو قبلا انجام دادم.

ali_72
شنبه 28 آذر 1394, 14:33 عصر
نه.
باید ورودی رو چک کنید.
route defult هم حتما باید وجود داشته باشه.
من دقیقا نتونستم مشکلتون رو متوجه بشم اما خودم این کار رو قبلا انجام دادم.

سلام
route defult که هست


یه بار دیگه توضیح میدم . ممنون میشم تا راهنمایی کنید

من در سایت دو نوع لینک دارم:
1- لینک نمایش کل محصولات
2- لینک گروه های محصولات

1- زمانیکه کاربر روی لینک کل محصولات کلیک میکنه کل محصولات سایت نمایش داده میشه
2- زمانیکه کاربر روی گروه های محصولات کلیک میکنه . محصولات آن گروه نمایش داده میشه مثلا روی لینک محصولات ورزشی کلیک میکنه محصولات ورزشی نمایش داده میشه

من برای هر دو مورد 1 و 2 یک اکشن استفاده کردم
و شناسه گروه را آپشنال گذاشتم (میتونم اکشن را بدون پاس دادن شناسه گروه فراخوانی کنم)
در اکشن تعریف کردم
اگه شناسه گروه محصول نال بود کل محصولات نمایش داده شه
و در غیر اینصورت با توجه به شناسه گروه محصول فیلتر انجام میشود

اگه کاربر حاضر در سایت اول روی لینک نمایش همه محصولات کلیک کنه همه چیز درسته و شناسه گروه نال به اکشن پاس داده میشه
و خوب بعدش اگه خواست روی لینک های گروه های محصولات کلیک میکنه


خوب تا اینجا مشکلی نیست

ولی اگه بعد از تمام کارهای بالا (کلیک روی گروه های محصولات)
دوباره روی لینک نمایش همه محصولات کلیک کنه دیگه شناسه گروه نال نیست و شناسه اخرین گروه بازدید شده به اکشن ارسال میشه و من در ادرس مرورگر سایت هم اینو میبینم :ناراحت:

کدهای مربوط به این قسمت را گذاشتم. اگه نیاز به گذاشتن کد قسمت خاصی هست بفرمائید. امیدوارم تونسته باشم منظورم رو برسونم

لطفا راهنمایی کنید
ممنون

r4hgozar
شنبه 28 آذر 1394, 16:20 عصر
سلام.
چیزی که من فهمیدم اینه که اینجا مشکل از route شما نیست قاعدتا. مشکل از کد صفحه شماست. روت شما داره درست کار می کنه.

url.action باید 2 تا باشه و نه بصورت بالا که کد دادین.


@Url.Action("نام ویو", "نام اکشن", new { id=item.Id })



یکی هم برای اینکه بدون ایدی باشه



@Url.Action("نام ویو", "نام اکشن")

ali_72
یک شنبه 29 آذر 1394, 07:24 صبح
سلام.
چیزی که من فهمیدم اینه که اینجا مشکل از route شما نیست قاعدتا. مشکل از کد صفحه شماست. روت شما داره درست کار می کنه.

url.action باید 2 تا باشه و نه بصورت بالا که کد دادین.


@Url.Action("نام ویو", "نام اکشن", new { id=item.Id })



یکی هم برای اینکه بدون ایدی باشه



@Url.Action("نام ویو", "نام اکشن")



خوب درسته

اینم کد من


<a href="@Url.Action(MVC.Mahsolat.ActionNames.Index, MVC.Mahsolat.Name,null)">
همه محصولات
</a>

اینم برای محصولات گروه خاص

Url.Action(MVC.Mahsolat.ActionNames.Index, MVC.Mahsolat.Name, new { group = g.OnvaneGoroh, id })

مشکل کار کجاست؟

r4hgozar
یک شنبه 29 آذر 1394, 08:37 صبح
نمی تونم اینجوری حدس بزنم.
باید مقدار ورودی تون و تو دفعه دوم کلیک نگاه کنید.
اما نگاه کنید من بالا چطوری ادرس دهی کردم.
شما هم به همون سبک کار کنید ببینید درست میشه!

ali_72
یک شنبه 29 آذر 1394, 12:41 عصر
نمی تونم اینجوری حدس بزنم.
باید مقدار ورودی تون و تو دفعه دوم کلیک نگاه کنید.
اما نگاه کنید من بالا چطوری ادرس دهی کردم.
شما هم به همون سبک کار کنید ببینید درست میشه!

من تفاوتی در سبک کد شما و خودم نمیبینم . چه تفاوتی هست؟

سبکی هم وجود نداره. نام اکشن بعد نام کنترلر و در انتها پارامترها