2009-05-14 5 views
2

В нашем приложении MVC мы используем управление автозаполнением jQuery на нескольких страницах. Это нормально работает на Create, но я не могу заставить его работать на Edit.MVC: заданное значение в автозаполнении в редакторе

Фактически, я не знаю, как заставить элементы автозаполнения предварительно загружать данные из модели и по-прежнему вести себя как автозаполнение, если пользователь хочет изменить значение.

Также как я могу убедиться, что значение отображается в том же формате, который используется в звонках Create?

Все наши элементы управления автозаполнения имеют соответствующие контроллеры и все результаты анализа Json.

+1

Что вы подразумеваете под предзагрузкой и все еще ведут себя как автозаполнение? Вы хотите, чтобы текстовое поле содержало значение, отправленное на просмотр контроллером? – 2011-04-28 14:32:04

ответ

0

Давайте попробуем это! Хорошо: Предположим, у вас был список стран, в которых вы нуждались, чтобы отфильтровать. Auto Complete знает, как по умолчанию по умолчанию, но предположим, что вам действительно нужна CountryName, а также вы знаете, что каждое нажатие клавиши ajax вызывает указанный вами URL. Создать метод действия следующим образом:

public ActionResult LookupCountry(string q, int limit) 
    { 
     var list = GetListOfCountries(q, 0, limit); 
     var data = from s in list select new {s.CountryName}; 
     return Json(data); 
    } 

Вот Jquery:

$(document).ready(function() { 
    $('#txtCountryName').autocomplete('<%=Url.Action("LookupCountry", "MyController") %>', { 
     dataType: 'json', 
     parse: function(data) { 
      var rows = new Array(); 
      for(var i=0; i<data.length; i++){ 
       rows[i] = { data:data[i], value:data[i].CountryName,   result:data[i].CountryName}; 
      } 
      return rows; 
     }, 
     formatItem: function(row, i, n) { 
      return row.CountryName; 
     }, 
     width: 300, 
     mustMatch: true, 
    }); 
}); 

Вот Html

<html><head></head><body>@Html.TextBox("txtCountryName",Model.CountryName)</body></html> 

В принципе, Волшебство в вызове LookUpCountry GetCountriesList (строковый запрос, int startindex, int limit) Возврат MyCountries.Where(c => c.CountryName.SubString(startindex, limit).Contains(query)).ToList();

Итак, вы делаете свою собственную функцию обрезки, потому что JQuery не знает, что такое CountryName или как ее обрезать. Как когда-либо, если это был JavaScript Object Я не совсем уверен, но сделать

var jsonString = @Html.GetListOfCountries() //Or Model.Countries.ToJSONString() 
var json = JSON.stringify(jsonString); //also JSON.Parse(jsonString) if stringify won't work 

, который будет возвращать необходимые странам как метод Html Helper Extension. И, возможно, как список объектов javascript, он был бы достаточно умным, чтобы обрабатывать его таким образом на своем родном языке. Однако первый подход работает для меня.

 Смежные вопросы

  • Нет связанных вопросов^_^