نمایش نتایج 1 تا 4 از 4

نام تاپیک: ران نشدن پروسه ذخیره کردن در بانک توسط Ajax

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #4
    کاربر دائمی آواتار ali_md110
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    شیراز
    پست
    1,181

    نقل قول: ران نشدن پروسه ذخیره کردن در بانک توسط Ajax

    سلام گویا جند هفتست درگیر این مساله شدید
    یک مثال
    ایتدا در کنترولر یک متد get جهت نمایش ویو و وهله سازی ویومدل میسازیم

    [HttpGet]

    public virtual ActionResult AddPersonnel()
    {

    var model = new PersonnelViewModel ();
    return View( model);
    }


    و متد post برای دریافت از سمت کلاینت


    [HttpPost]
    [AjaxOnly] //فقط در حالت اي‌جكس قابل دسترسي باشد
    [ValidateAntiForgeryToken]
    public virtual ActionResult AddPersonnel(PersonnelViewModel model)
    {
    if (!ModelState.IsValid)
    {
    ModelState.AddModelError("", @"خطاهای برنامه را بررسی کنید");
    return new JsonResult
    {
    Data = new
    {
    errors = ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(x => x.ErrorMessage).ToArray(),
    IsSuccess = false
    },

    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    }
    };

    }

    var ctx= new AppDbCo0ntext();
    ctx.Person.Add(new Person{Name=model.Name})

    var i=ctx.saveChange();

    return new JsonResult
    {
    Data = new
    {

    errors = ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(x => x.ErrorMessage).ToArray(),
    IsSuccess = i>0


    },

    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    }
    };

    }




    یک اتربیوت بسازید برای حالت پست ajax

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public sealed class AjaxOnlyAttribute : ActionFilterAttribute
    {
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
    if (filterContext.HttpContext.Request.IsAjaxRequest() )
    {
    base.OnActionExecuting(filterContext);
    }
    else
    {
    throw new InvalidOperationException("This operation can only be accessed via Ajax requests");
    }
    }
    }




    سمت سرور تکمیل هست
    حالا در سمت ویو
    using ویومدل در سمت ویو فراموش نشود
    @model PersonneViewModel


    @using (Html.BeginForm("AddPersonnel", "ControllerName", FormMethod.Post, new { @class = "form-horizontal", role = "form", id = "inputForm" }))
    {

    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
    @Html.LabelFor(m => m.Name, new { @class = "control-label col-md-1 col-lg-1", @for = "Name" })
    <div class="col-md-2 col-lg-2">
    <div class="input-group">
    @Html.TextBoxFor(x => x.Name, new { @class = "form-control", @for = "Name", id = "Name" })
    </div>
    </div>
    <div class="col-md-2 col-lg-2">
    <button type="button" id="save" class="btn btn-success">
    <i class="fa fa-save"></i> ثبت نام
    </button>
    </div>
    </div>
    }



    متد جی کوئری هم اینجور بنویسید

    $("#save").click(function(e) {

    e.preventDefault();
    var button = $("#save");
    var $form = $("#inputForm");
    var validator = $form.data('validator');
    validator.settings.ignore = ':hidden:not(".multiselect")';
    validator.settings.ignore = ":hidden:not(select)";

    var validateForm = function(form) {
    //فعال سازي دستي اعتبار سنجي جي‌كوئري
    var val = form.validate();
    val.form();
    return val.valid();
    };
    //اگر فرم اعتبار سنجي نشده، اطلاعات آن ارسال نشود
    if (!validateForm($form)) return;


    button.attr('disabled', 'disabled');
    button.val("لطفا صبر کنید");


    $.ajax({
    url: '@Url.Action("AddPersonnel", "ControllerName نام کنترولر")',
    type: "POST",
    data: $form.serialize(), // فيلدهاي فرم در اینجا ارسال میشود
    cache: false,
    complete: function(xhr, status) {
    var data = xhr.responseText;
    if (xhr.status == 403) {
    window.location = options.loginUrl;
    } else if (status === 'error' || !data) {
    $.each(data,
    alert("برررسی خطا")

    } else {

    button.removeAttr('disabled');
    button.val("ثبت در سیستم");
    $('.validation-summary-errors').addClass('validation-summary-valid');
    $('.validation-summary-errors').removeClass('validation-summary-errors');

    }
    },


    success: function(data) {
    if (data.IsSuccess) {


    alert("ثبت شد");


    } else {

    if (data.errors != null) {
    // show model state error
    $.each(data.errors,
    function(idx, errorMessage) {
    alert(errorMessage);//بررسی خطا
    }
    );


    }

    }

    },
    error: function(xhr, ajaxOptions, thrownError) {
    alert("خطا");

    }
    });
    $('.validation-summary-errors').addClass('validation-summary-valid');
    $('.validation-summary-errors').removeClass('validation-summary-errors');

    button.removeAttr('disabled');
    button.val("ثبت در سیستم");
    });


    آخرین ویرایش به وسیله ali_md110 : جمعه 02 اسفند 1398 در 19:16 عصر

تاپیک های مشابه

  1. سوال: ایجاد پروسه توسط ویندوزسرویس
    نوشته شده توسط scarlet_yekta در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 1
    آخرین پست: شنبه 19 دی 1394, 14:42 عصر
  2. سوال: اجرای یک کوئری توسط ajax
    نوشته شده توسط chaown در بخش PHP
    پاسخ: 2
    آخرین پست: چهارشنبه 17 آبان 1391, 20:35 عصر
  3. آموزش: رفرش کردن DIV توسط Ajax
    نوشته شده توسط djsaeedkhan در بخش PHP
    پاسخ: 8
    آخرین پست: شنبه 02 اردیبهشت 1391, 07:31 صبح
  4. مخفی کردن پروسه از لیست پروسه های در حال اجرا بدون استفاده از تایمر
    نوشته شده توسط farboodj1375 در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: یک شنبه 13 شهریور 1390, 13:38 عصر
  5. سوال: ایجاد کردن یک پروسه در دل پروسه دیگری به چه ترتیب است؟
    نوشته شده توسط natanz در بخش توسعه‌ی لینوکس و نرم افزارهای آزاد
    پاسخ: 0
    آخرین پست: پنج شنبه 12 فروردین 1389, 14:40 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •