سؤال

أنا جديد جدًا على MVC ، لذلك قد يبدو هذا سؤالًا واضحًا ، ولكن عند النشر إلى ActionResult ، يتم استدعاء ActionResult ، لكن العرض لا يتغير.

ما أقوم به هو وجود صفحة بحث أساسية حيث يمكن للمستخدم البحث عن قاعدة البيانات الخاصة بي ويتم إرجاع النتائج وتراجعها.

فيما يلي JavaScript الذي يطلق على ActionResult في وحدة التحكم الخاصة بي.

    function SubmitSearch() {

    var searchBox = document.getElementById('searchBox');

    $.post("MyController/SearchResults/",
    {
        searchString: searchBox.value,
        page: 0
    });

    window.location = "../DriverStudio/Drivers/SearchResults/" + searchBox.value + '/0';
}

إن حلي الحالي (وهو اختراق مروع) هو التعليق على $ .post (نظرًا لأن طريقي تم إعداده بطريقة تدعو فيها النافذة. SearchResutls ActionResult) وتعيين النافذة. التوظيف على ما قام به المستخدم ل ، بدءا من الصفحة 0.

حتما توجد طريقة افضل. ماذا علي أن أفعل؟

هل كانت مفيدة؟

المحلول

قم بإعداد إجراء SearchResults لإرجاع طريقة عرض جزئية تحتوي فقط على جزء من الصفحة المراد تحديثها عند تنفيذ البحث. يجب احتواء هذه القطعة في بعض الحاويات ، مما يجعل من السهل استبداله. ثم استخدم آلية رد الاتصال على طريقة النشر لاستبدال محتويات DIV ذلك بنتيجة العرض الجزئي التي تم إرجاعها من إجراء SearchResults الخاص بك. ارجع كاذبة من معالجك لإيقاف الإجراء الافتراضي من اتخاذها.

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

    $.post("MyController/SearchResults/", 
    { 
        searchString: searchBox.val(), 
        page: 0 
    }, function(data) {
        $('#searchResults').html( data );
    }); 

    return false;
}

هذا يفترض أن بعض الرمز يشبه شيء مثل:

 <% using (Html.BeginForm()) { %
      <label for="searchBox">Search:</label>
      <%= Html.TextBox("searchBox") %>
 <% } %>
 <div id="searchResults">
 </div>

نصائح أخرى

لست على دراية بـ MVC ، ولكن ماذا تفعل ActionResult بخلاف إعادة توجيه المستخدم إلى عنوان URL الذي لديك في Window.local؟

ربما تحتاج إلى تنفيذ رد اتصال من مستندات jQuery:

 jQuery.post( url, data, callback, type )

إذن أنت تمرر عنوان URL والبيانات ، ولكن لا شيء حول ما تريد فعله بالبيانات التي تم إرجاعها.

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top