اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
قطعه کد زیر را در نظر بگیرید :
اکشن متد فوق به صورت زیر فراخوانی میشود :
و تابع جاوا اسکریپت SaveFailure به صورت زیر پیاده سازی شده بود :
کار تابع فوق، فعال کردن مجدد دکمه ثبت و نمایش پیغامی به کاربر میباشد. قطعه کد فوق بدون هیچ مشکلی اجرا میشد تا اینکه تمامی اکشن متدهایی که به صورت ایجکس به صورت اکشن متد فوق پیاده سازی شده بودند، از کار افتادند.
مشکل به وجود آمده حاصل اضافه شدن تگهای زیر به وب کانفیگ بود :
بعد از افزودن کدهای فوق وقتی برنامه به خط زیر میرسید، سعی در انتقال به کنترلر Error میکرد:
و در خروجی تنها مقداری که به سمت کاربر برگشت داده میشد، مقدار BadRequest بود و خط زیر باعث خطا و توقف برنامه میشد:
با کامنت کامنت کردن کدهای اضافه شده در Web.config مشکل فوق رفع خواهد شد.
همچنین در صورتیکه قصد داشتید تگهای فوق را در web.config داشته باشید (جهت هندل کردن صفحات پیدا نشده) میتوانید از مقدار دهی TrySkipIISCustomError با true این مشکل را رفع کنید.
روشی دیگر:
[HttpPost,AjaxOnly, ValidateAntiForgeryToken] public virtual JsonResult Create(AddDeviceGroupViewModel deviceGroupViewModel) { if (ModelState.IsNotValid()) { Response.StatusCode = (int)HttpStatusCode.BadRequest; return Json(new { success = false, message = ModelState.FirstErrorMessage(), notificationType = NotificationType.Error }, JsonRequestBehavior.AllowGet); } var result = _deviceGroupService.Add(deviceGroupViewModel); // other codes }
@using (Ajax.BeginForm(MVC.Admin.DeviceGroup.Create(), new AjaxOptions { HttpMethod = "POST", OnSuccess = "saveAjaxForm", OnFailure = "SaveFailure" })) { // form content }
function SaveFailure(data) { $("button[type=submit]").prop('disabled', false); var result = $.parseJSON(data.responseText); showMessage(result.message, result.notificationType); }
مشکل به وجود آمده حاصل اضافه شدن تگهای زیر به وب کانفیگ بود :
<httpErrors errorMode="Custom"> <remove statusCode="404"/> <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL"/> </httpErrors>
Response.StatusCode = (int)HttpStatusCode.BadRequest;
و در خروجی تنها مقداری که به سمت کاربر برگشت داده میشد، مقدار BadRequest بود و خط زیر باعث خطا و توقف برنامه میشد:
var result = $.parseJSON(data.responseText);
همچنین در صورتیکه قصد داشتید تگهای فوق را در web.config داشته باشید (جهت هندل کردن صفحات پیدا نشده) میتوانید از مقدار دهی TrySkipIISCustomError با true این مشکل را رفع کنید.
Response.TrySkipIisCustomErrors = true;
روشی دیگر:
<system.webServer> <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" />