فكرة التحقق من صحة AJAX - كاملة مع التحقق من الصحة والصلحة

StackOverflow https://stackoverflow.com/questions/892835

سؤال

لقد كنت أبحث في العديد من أفكار التحقق من صحة الجانب ASP.NET MVC بما في ذلك XVAL. هذا لا يوفر التحقق من صحة في هذه اللحظة في الوقت الحالي، لذا اخترت القيام بمركز AJAX الذي حلقات من خلال أخطاء Odristate وتحديث DIV مع رسائل الخطأ على مشاركة نجاح AJAX الناجحة.

المشكلة مع هذه هي التحقق من الصحة * بجانب الحقول لن يتم ملؤها. لقد توصلت إلى فكرة بديلة لم أختبرها بعد لأنني لا أعرف بناء الجملة الكامل للحصول عليها حتى الآن لكنني أعتقد أنني كنت أرى ما اعتقدت يا رفاق.

قد تكون مشكلة واحدة أعتقد أن هناك مشكلة في أنه عند النشر إلى طريقة تحرير / إنشاء إجراء في وحدة التحكم الخاصة بك وتريد إرجاع كائن JSON، لست متأكدا من أن القانون قيد الاستخدام حيث يتم استخدام JSON للحصول على تصرفات فقط.

إذا كنت تعتقد أنها فكرة جيدة وترغب في المساعدة، فالرجاء ترك إجابة وأي مقتطفات شفوية للحصول على هذا العمل. إذا كنت تعتقد أنه قد عين مخططا ويمكن القيام به بشكل أفضل، واسمحوا لي أن أعرف كيف.

مراقب:

if (!ModelState.IsValid)
{
            var err = ModelState.Where(f => f.Value.Errors.Count > 0);    
            if (Request.IsAjaxRequest())
            {
                   return this.Json(err);
            }
            else
            {
                  return View(PostedItem); 
            }
}

رأي:

    $(function() {



    $('#createForm').ajaxForm({
        success:fillSummary
    });

    //click events
    $('#btnSave').click( function(){
        $('#createForm').submit();
    });

    function fillSummary(data) 
    {
       //Loop through the modelstate errors returned
        $.each(data)
       {
            //Append Summary DIV with error message
            //Look for span with the ModelState key name and set it to visible
       }           
    }



    <div id="summary">
       <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.")%>
    </div>
    <form action="<%=Url.Action("Create") %>" method="post" id="createForm">

        <fieldset>
            <div>
                 <label for="Title">Title:</label>
                <%= Html.TextBox("Title",Model.Title) %>
                <%= Html.ValidationMessage("Title", "*") %>
                <span id="val_Title" style="display:none">*</span>              
            </div>
   </form>
   <input type="button" value="Save" id="btnSave" />
هل كانت مفيدة؟

المحلول

في مشروعي الحالي ASP.NET MVC لدي الكثير من الإجراءات التي أستخدمها لأجاكس وركضت عبر إصدار التحقق من الصحة أيضا. ما قمت بإنشاء كائن غلاف يتم إرجاعه من كل عملية من هذه الإجراءات التي تبدو مثل هذا ...

public class JsonWrapper
{
   public object Data { get; set; }
   public bool IsError { get; set; }
   public string Message { get; set; }
}

إذا لم يكن للتحقق في الإجراء في الإجراء أي نوع من الأخطاء، فأرضع أي بيانات أريد إرجاعها في خاصية البيانات. ومع ذلك، إذا كان هناك أي نوع من أنواع الأخطاء الصحيحة أو استثناء آخر، فقد قمت بتعيين علامة ISERROR إلى True وتعيين رسالة خطأ في خاصية الرسالة. ثم في نهاية الإجراء، أقوم بتسلسل الكائن إلى JSON وإعادته، (نعم يمكنك القيام بذلك من إجراء آخر) ...

return Json(myJsonWrapper);

من جانب العميل، في Onsuccess من رمز البريد الخاص بي، أتحقق من الأخطاء، وأخذ أي إجراءات neccessary مثل هذا ... (ملاحظة، في هذه المرحلة في التعليمات البرمجية، كان الكائن الذي تم إرجاعه من الخادم بالفعل Deserialized في كائن JS بواسطة jquery)

function onSuccess(jsonWrapper) {
    if (!jsonWrapper.IsError) {
        var myDataFromAction = jsonWrapper.Data;
        //Do stuff with my data
    }
    else {
        MessageBox.ShowMessage(jsonWrapper.Message);
    }
}

لن يناسب هذا السيناريو الخاص بك من المربع، ولكن يمكنك القيام بشيء مماثل كمفهوم. آمل أن يعطيك هذا على الأقل بعض الأفكار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top