2012-04-23 3 views
0

Я новичок, изучая пример текстового поля Autocomplete. То, что я не понимаю, находится в функции «AutoCompleteHelper» в моем контроллере, вход должен быть назван «term». Если я назову его чем-то другим, например «mystr» или «reqstr», то во время отладки он всегда будет говорить, что вход «null». Я не определял «термин» где-либо еще в моих .js и .cshtml. Я фактически назвал его name = "q" в .cshtml файле. Что заставляет меня использовать название «термин»?Основы MVC - параметр ввода контроллера

код контроллера:

string[] txtlst = {"ActionScript", "AppleScript", 
     "Asp", "BASIC", "C", "C++", "Clojure", 
     "COBOL", "ColdFusion", "Erlang", "Fortran", 
     "Groovy", "Haskell", "Java", "JavaScript", 
     "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme"}; 

public JsonResult AutoCompleteHelper(string term) { 
      if (!Request.IsAjaxRequest()) return null; 
      var lst = txtlst.Where(s => s.StartsWith(term)).ToList(); 
      var res = lst.Select(x => new { value = x, label = x }); 
      return Json(res, JsonRequestBehavior.AllowGet); 
     } 

.js код:

$("input[data-autocomplete-source]").each(function() { 
     $(this).autocomplete({ source: $(this).attr("data-autocomplete-source") }); 
    }); 
}); 

.cshtml код:

<p>Auto Complete Example</p> 
<input type="text" name="q" data-autocomplete-source="@Url.Action("AutoCompleteHelper", "Home")" /> 

ли я с видом/то недоразумение? Я не понимаю, почему я исправлен, чтобы использовать термин «term» в качестве моего имени параметра.

ответ

1

Автозаполнение делает вызов AJAX для извлечения данных и использует имя term в строке запроса, например. AutoCompleteHelper?term=Brainfuck.

Структура MVC автоматически сопоставляет строку запроса и формирует контент с параметрами в методе действий, поэтому при вызове метода значение из строки с именем term используется для параметра term.

+0

ohh okay! Итак, есть ли где-нибудь, где я могу определить свое собственное имя параметра? Я думал, что мое имя = «q» делает это, если нет, что это такое? В общем, как я могу проверить, какие параметры (ы) и их имя (имена) каждый другой Помощник передают в строку запроса? Извините о моих проблемах со спамом. – Tom

+0

@Tom Я думаю, что вы установили его в своем контроллере с помощью 'AutoCompleteHelper (строковый термин)', если вы измените его на 'AutoCompleteHelper (строка q)' Я думаю, что он изменит его на q – Manatherin

+0

@Manatherin no, вы это пробовали? когда я его запускаю, q равно null. это может быть только термин. – Tom

0

Почему бы не сделать это в чистом JS и дать дорогу более бегло опыт? В основном это статично:

var txtlst = [ "ActionScript", "AppleScript", 
       "Asp", "BASIC", "C", "C++", "Clojure", 
       "COBOL", "ColdFusion", "Erlang", "Fortran", 
       "Groovy", "Haskell", "Java", "JavaScript", 
       "Lisp", "Perl", "PHP", "Python", "Ruby", 
       "Scala", "Scheme"]; 

$("input[data-autocomplete-source]").each(function() { 
    $(this).autocomplete({ source: txtlst }); 
}); 
+0

, потому что отфильтрованный список динамически генерируется с сервера, мы не хотим передавать тысячи элементов в сценарий клиента в реальной ситуации. – Tom

+0

@Tom: О, я вижу, это был плохой пример. : D –

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