2012-06-14 4 views
0

У меня есть каскадные выпадающие списки, чтобы привести список контактов для выбранной компании. Запрос контактов выбранной компании производится следующим образом с использованием запроса JSON.Каскадирование выпадающего списка с JSON не приносит новые записи

На взгляд:

$('#companyId').change(function() { 
     var selectedCompany = $(this).val(); 
     if (selectedCompany != null && selectedCompany != '') { 

      $.getJSON('@Url.Action("Contacts")', { id: selectedCompany }, 
          function (Contacts) { 

         var contactSelect = $('#contactId'); 
         contactSelect.empty(); 
         $.each(Contacts, function (index, contact) { 
         contactSelect.append($('<option/>', { 
         value: contact.value, 
         text: contact.text 
        })); 
       }); 
      }); 
     } 
    }); 

Контроллер:

public ActionResult Contacts(int id) 
    { 

     return Json(

      db.Contacts.Where(x=>x.deleted==false). 
      Select(c => new { value = c.contactId, text = c.contactName, c.companyId }). 
      Where(t => (int)t.companyId == id).OrderBy(x=>x.text), 
      JsonRequestBehavior.AllowGet 
     ); 
    } 

Это работает хорошо. Однако этот код на стороне сервера выполняется только в первый раз для любой выбранной компании (в первом выпадающем списке). то есть. если я выберу ComanyA, а затем CompanyB и снова CompanyA, это не приведет к тому, что список контактов с сервера будет заселен из кеша. Поэтому новые контакты не заполняются, как ожидалось.

Любая помощь будет замечательной!

ответ

1

Вам необходимо добавить произвольное число в запрос, чтобы браузер не задумывался над его раздельным звонком каждый раз. Вы можете изменить код на:

$.getJSON('@Url.Action("Contacts")', { id: selectedCompany, n : Math.random() }, 
          function (Contacts) { 

         var contactSelect = $('#contactId'); 
         contactSelect.empty(); 
         $.each(Contacts, function (index, contact) { 
         contactSelect.append($('<option/>', { 
         value: contact.value, 
         text: contact.text 
        })); 
       }); 
      }); 
+0

Итак, это так просто? Nice one ... – Kaf

1

Это IE проблема кэширования, есть несколько способов ее решения на стороне клиента или на стороне сервера. Проверьте этот вопрос для деталей и рецептов. $.getJSON returning cached data in IE8

+0

Спасибо, что ответили ... – Kaf