كيفية إرسال نتيجة تقديم نموذج AJAX في ASP.NET MVC؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

في ASP.NET MVC، وجود نموذج أكثر أو أقل مثل هذا:

<% using (Ajax.BeginForm(new AjaxOptions() { OnSuccess="onSuccess"})) {%>
  <p>
    <label for="Comment">Comment:</label>
    <%= Html.TextArea("Comment")%>
    <%= Html.ValidationMessage("Comment", "*")%>
  </p>
  <p><input type="submit" value="Submit comment" /></p>
<% } %>

كيف يمكن أن تعرف وظيفة JavaScript Onsucccess عما إذا كانت النتيجة إصدارا آخر من النموذج لأنه لم يتم التحقق من صحة أو تعليق كحموم لإضافته إلى قائمة التعليقات أو تسجيل الدخول إلى الصفحة التي يجب أن تكون مغلفة لتسجيل الدخول؟

لا يوجد حل صحيح

نصائح أخرى

يمكنك تحديد ذلك في JSON Returning Retering أو أيا كانت طريقة النقل التي تستخدمها؟

لست متأكدا إذا كان هذا ما تبحث عنه، ولكن أيضا: هذه هي الطريقة التي تسمى وظيفة onsuccess:

YourFunction(ajaxContext);

يعرف ajaxcontext على النحو التالي:

AjaxContext ajaxContext = new AjaxContext(request, updateElement, loadingElement, ajaxOptions.InsertionMode);

يجب أن تحل محل التعليمات البرمجية داخل نموذج AJAX الخاص بك مع طريقة عرض جزئية جديدة، ثم سترجع هذا العرض الجزئي من وحدة التحكم الخاصة بك. ستتكون العرض الجزئي في:

<p>
    <label for="Comment">Comment:</label>
    <%= Html.TextArea("Comment")%>
    <%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>

بهذه الطريقة، ينظر عرضك الجزئي تماما مثل عرض منتظم. لسوء الحظ، لا توجد طريقة بسيطة لتنفيذ JavaScript كإرد (لأنك تستجيب مع عرض). سيكون من الأسهل إذا كانت ردك سلسلة JSON، ولكن في هذه الحالة، لا يمكنك استخدام Ajaxform لأن سلسلة JSON سيتم تقديمها على الشاشة نتيجة لتقديم النموذج (ومعالجة ردها). قد يعمل هذا رغم ذلك (لم أحاول ذلك):

<p>
    <label for="Comment">Comment:</label>
    <%= Html.TextArea("Comment")%>
    <%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
<script type="text/javascript">
    function processResponse(data){
        // blah blah blah
    }
    processResponse(<%= ViewData["dataFromTheController"] %>);
</script>

يمكن أن تضيف ببساطة فئات CSS مختلفة إلى عناصر الجذر من ردودك (على سبيل المثال. على سبيل المثال، .comments، .login). ثم (على سبيل المثال في jquery):

var response = $(responseContent);
$('.form', response).each(function() {
    // $(this) is form
});
$('.comments', response).each(function() {
    // $(this) is comments
});
$('.login', response).each(function() {
    // $(this) is login page
});

كيف يمكن أن تعرف وظيفة JavaScript Onsucccess عما إذا كانت النتيجة إصدارا آخر من النموذج لأنه لم يتم التحقق من صحة أو تعليق كحموم لإضافته إلى قائمة التعليقات أو تسجيل الدخول إلى الصفحة التي يجب أن تكون مغلفة لتسجيل الدخول؟

الجواب القصير هو أنه لا يمكن إلا إذا قمت بالتحقق من صحة ذلك صراحة. وذلك لأن JSON نقل كسلسلة وعندما يحصل جافا سكريبت جانبي العميل على السلسلة.

بالنسبة للمبتدئين، يجب أن تعرف ضمنيا نوع الكائن المراد توقعه. إذا كنت تتصل بخدمة الويب @ Cars/List ثم تعرف أن الكائن الذي تم إرجاعه سيكون قائمة السيارات وتحليلها بشكل مناسب في عميلك. يمكنك تشغيل أخطاء يجب عليك التعامل معها بشكل مناسب عن طريق إعادة محاولة الطلب أو تسجيلها أو إظهار رسالة خطأ.

أود أن أوصي بك لاستخدام jQuery.form البرنامج المساعد, ، مع هذا، يمكنك الحصول على نموذج عادي ليصري مثل AJAX واحدة، مثل هذا:

 <script type="text/javascript"> 
        // wait for the DOM to be loaded 
        $(document).ready(function() { 
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                alert("Thank you for your comment!"); 
            }); 
        }); 
    </script> 

<form id="myForm" action="comment.php" method="post"> 
    Name: <input type="text" name="name" /> 
    Comment: <textarea name="comment"></textarea> 
    <input type="submit" value="Submit Comment" /> 
</form>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top