مدیریت Action های ناشناخته در MVC
یکشنبه 19 اردیبهشت 1395در این مقاله قصد داریم راه حلی برای خطاهای احتمالی در اجرای پروژه پیاده سازی کنیم. و می آموزیم که چگونه Action هایی را که نام آنها در کنترلر موجود نیست مدیریت کنیم.
فرض کنید یک متد Action را با استفاده از نام Action که در کنترلر دسترس نیست فراخوانی میکنیم به عبارت دیگر کنترلر درستی را فراخوانی میکنیم اما نام action را که پاس میدهیم در کنترلر وجود ندارد. در این وضعیت نیاز به مدیریت این استثناها است. برای آن یک متد با نام HandleUnKnownAction وجود دارد . این متد یک متد مجازی درون کلاس abstract کنترلر است. هنگامی فراخوانی می شود که یک کنترلر درخواست شود اما متدی با نام action مشخص شده در کنترلر موجود نباشد.
پیاده سازی آن را مرحله به مرحله خواهیم دید:
یک پروژه MVC با قالب Empty ایجاد میکنیم.
بر روی کنترلر راست کلیک کرده و از قسمت Add گزینه Controller را انتخاب میکنیم. برای ایجاد آن به صورت خالی MVC 5 Controller-Empty را انتخاب میکنیم.
نام کنترلر را Home قرار دهید. پس از آن میبینیم که متد ActionResult با نام Index اضافه شده است.
برای اضافه کردن یک View بر روی action راست کلیک کرده و گزینه Add View را انتخاب میکنیم. View را نیز به صورت Empty و بدون مدل ایجاد میکنیم.
درون صفحه View عنوانی را به صورت زیر در نظر میگیریم.
پروژه را اجرا میکنیم و می توانیم ببینیم که صفحه index همراه با عنوان نمایش داده شده است.
در نوار آدرس ، نام action را تغییر می دهیم. مثلا از index به index1 تغییر داده و صفحه را دوباره بارگذاری میکنیم.
یک خطای سروری رخ می دهد که برای مدیریت این وضعیت یا خطاها به Override کردن متد مجازی با نام HandleUnKnownAction نیاز است.
درون کنترلر Home این متد را Override میکنیم. هر گاه یک action که در کنترلر موجود نیست فراخوانی شود این متد فراخوانی می شود. در این مثال ما به متد index هدایت می شویم. برای این کار از متد redirectToAction برای هدایت شدن به action خاصی با استفاده از نام action استفاده می شود.
ExecuteResult پردازش نتیجه یک متد action را توسط یک نوع سفارشی که از کلاس action result ارث بری میکند فعال می سازد.
اکنون پروژه را اجرا کرده و نام action را از index به index1 تغییر می دهیم. پس از debug کردن به متد HandleUnknownAction خواهد رفت و در آخر به متد index هدایت می شویم و View آن به نمایش در می آید.
- ASP.net MVC
- 1k بازدید
- 5 تشکر