مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

پیام OnSuccess در mvc

  • جمعه 26 آبان 1396
  • 10:57
تشکر میکنم

من در پروژه در View و Controller  از این کدها استفاده کردم ولی  وقتی پیام را در تابع Onsuccess نشان میدهد به یک صفحه دیگر میرود یعنی در همان صفحه این پیام را نشان نمی دهد
,و بعد از نشان دادن پیام به صفحه دیگری میرود ولی من میخوام پیام را در همان صفحه ای که هست نشان دهد مشکل از چیه ؟
.........................................View.................................

@using (Ajax.BeginForm("Create", "Forces", new AjaxOptions

{
    UpdateTargetId = "ajaxshow",
    LoadingElementId = "gifloading",
    InsertionMode = InsertionMode.Replace,
    OnSuccess = "OnSuccess",
    OnFailure = "OnFailure"


}

.........................................JavaScript.................................

<script type="text/javascript">
    
    function OnSuccess()
    {
        swal("ثبت شد", "", "success");
    }
  
    function OnFailure() {
        swal("ثبت نشد", "", "error");
    }
    


</script>

.........................................Controller.................................

if (ModelState.IsValid)
            {
                //bool existsforce = db.Forces.Any(f => f.NameForce.Equals(force.NameForce) && f.FamilyForce.Equals(force.FamilyForce));
                bool existscodebsj = db.Forces.Any(c => c.CodeForce.Equals(force.CodeForce));
                if (existscodebsj)
                {
                   
                   return Json(new { success = false }, JsonRequestBehavior.AllowGet);
                }
             

                else 
                {
                  
                    db.Forces.Add(force);
                    db.SaveChanges();
                    ModelState.Clear();
                    return Json(new { success = true }, JsonRequestBehavior.AllowGet );

                }
            }

            return Json(force);

پاسخ های این پرسش

تعداد پاسخ ها : 13 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 26 آبان 1396
  • 11:30

ابتدا مطمعن شوید مقادیر UpdateTargetId و LoadingElementId را به درستی وارد کرده اید و همچنین نیاز نیست success را بازگردانی کنید. OnSuccess موفق بودن درخواست را بررسی می کند نه مقدار بازگردانی شده.

را حل این است که  چند پارامتر توسط تابع onsuccess دریافت کنیم:

@using (Ajax.BeginForm("Create", "Forces", new AjaxOptions
{
    UpdateTargetId = "ajaxshow",
    LoadingElementId = "gifloading",
    InsertionMode = InsertionMode.Replace,
    OnSuccess = "OnSuccess(message, status)",
    OnFailure = "OnFailure"
}

function OnSuccess(message, status)
{
    if(status){
        swal(message, "error");
    }else{
        swal(message, "success");
    }
}

              if (db.Forces.Any(c => c.CodeForce.Equals(force.CodeForce)))
                {
                    
                   return Json(new { message = "قبلا ثبت شده است", status = false }, JsonRequestBehavior.AllowGet);
                }
                else
                {
                   
                    db.Forces.Add(force);
                    db.SaveChanges();
                    ModelState.Clear();
                    return Json(new { message = "با موفقیت ثبت شد", status = true }, JsonRequestBehavior.AllowGet );
 
                }

پیشنهاد من این است که از AjaxOptions.OnComplete استفاده کنید.

چون براساس مقدار بازگردانی شده میتوان پیغامی مناسب نمایش داد، onSeccess  تنها موفقیت آمیز بود درخواست را بررسی می کند.

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 11:55

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

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 11:56

البته UpdateTargetId و LoadingElementId در Layout سایت هستند

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 26 آبان 1396
  • 12:01

خصوصیت زیر را به AjaxOptions اضافه کنید:

        InsertionMode = InsertionMode.Replace, 

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 12:06

داره همچین خصوصیتی 

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 12:08

میشه یه مثال با OnComplete بنویسید 
تفاوتی نداره فک کنم همون Onsucces هارو Complete می نویسیم درسته ؟؟

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 26 آبان 1396
  • 12:10

تنها کافی است نام چند تابع را تغییر دهید و پس از OnCompelete را مقدار دهی کنید.

@using (Ajax.BeginForm("Create", "Forces", new AjaxOptions
{
    UpdateTargetId = "ajaxshow",
    LoadingElementId = "gifloading",
    InsertionMode = InsertionMode.Replace,
    OnCompelete = "OnCompelete(message, status)""
}

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 12:13

با این روش میشه جایگزینش روش بالا رفت ؟

$.ajax({
           type: "POST",
           url: "/Controller/Action", // the URL of the controller action method
           data: null, // optional data
           success: function(result) {
                // do something with result
           },                
           error : function(req, status, error) {
                // do something with error   
           }
       });



کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 26 آبان 1396
  • 12:15

بله می شود; مستندات : jQuery.ajax() | jQuery API Documentation

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 12:29

کلا با هر روشی  برم به  صفحه جدید دیگه میره 
چرا ؟؟؟؟؟؟؟؟

@using (Ajax.BeginForm("Create", "Forces", new AjaxOptions

{
    UpdateTargetId = "ajaxshow",
    LoadingElementId = "gifloading",
    InsertionMode = InsertionMode.Replace,
    OnComplete="OnSuccess"
    


}
<script type="text/javascript">
    
    function OnSuccess(message, status) {
        if (status) {
            swal(message, "error");
        } else {
            swal(message, "success");
        }
    }
    


</script>
  if (ModelState.IsValid)
            {
                //bool existsforce = db.Forces.Any(f => f.NameForce.Equals(force.NameForce) && f.FamilyForce.Equals(force.FamilyForce));
                bool existscodebsj = db.Forces.Any(c => c.CodeForce.Equals(force.CodeForce));
                if (existscodebsj)
                {
                    return Json(new { message = "قبلا ثبت شده است", status = false }, JsonRequestBehavior.AllowGet);
                }
                else
                {

                    db.Forces.Add(force);
                    db.SaveChanges();
                    ModelState.Clear();
                    return Json(new { message = "با موفقیت ثبت شد", status = true }, JsonRequestBehavior.AllowGet);

                }
            }

            return Json(force);



با این روش دیگه پیام رو هم نشون نمیده 



بعد از ارسال 

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 12:38
$.ajax({
           type: "POST",
           url: "/Controller/Action", // the URL of the controller action method
           data: null, // optional data
           success: function(result) {
                // do something with result
           },                
           error : function(req, status, error) {
                // do something with error   
           }
       });
با این روش اگه بخواهم برم 
جلوی data چی قرار بدم تا اطلاعات ارسال بشه ؟
و در کنترلر به چه صورت استفاده کنم  ؟
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • جمعه 26 آبان 1396
  • 12:48

پارامتر ها را وارد نکرده اید:

OnComplete="OnSuccess(message,status)"

کاربر سایت

مهدی الهی

عضویت از 1396/07/29

  • جمعه 26 آبان 1396
  • 13:46

گذاشتم 
بعد    console.log هم گذاشتم بببینم داخل متد Oncomplete میره که اصلا نمیره داخل متد 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)