Je suis assez nouveau avec MVC et de travailler sur un site MVC4 avec Twitter Bootstrap et nous avons besoin d'un HtmlHelper pour TypeAhead.MVC Bootstrap typeahead HtmlHelper
J'ai obtenu le code pour un HtmlHelper pour Bootstrap Twitter here:
public static MvcHtmlString TypeaheadFor<TModel, TValue>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TValue>> expression,
IEnumerable<string> source,
int items = 8)
{
if (expression == null)
throw new ArgumentNullException("expression");
if (source == null)
throw new ArgumentNullException("source");
var jsonString = new JavaScriptSerializer().Serialize(source);
return htmlHelper.TextBoxFor(
expression,
new {
autocomplete = "off",
data_provide = "typeahead",
data_items = items,
data_source = jsonString
}
);
}
j'ai écrit aussi le code suivant pour fournir le JSON pour le typeahead:
public JsonResult Autocomplete(string input) {
var model = db.Users
.Select(g => new {
label = g.Name.StartsWith(input)
});
return Json(model, JsonRequestBehavior.AllowGet);
}
Comme il est maintenant, je fournis le HtmlHelper avec une chaîne IEnumerable <> pour remplir la boîte à suggestions. Je n'arrive pas à comprendre comment utiliser mon propre JsonResult pour cela. Il doit également être dynamique car nous aurons besoin de HtmlHelper sur des instances multipe sur le site Web avec plusieurs sources d'éléments différentes, toutes tirées de la base de données en utilisant EF. Ce que je n'aime pas dans cette solution, c'est que le contenu de la chaîne IEnumerable <> est affiché dans la source html, facilement lisible par le visiteur.
Existe-t-il un moyen d'avoir un HtmlHelper pour Twitters typeahead.js et d'appeler JsonResult comme source de l'élément, et de ne pas avoir le JSONResults codé dans le HTML imprimé à l'utilisateur final?
Juste un FYI, les données JSON sont également facilement visibles à l'utilisateur grâce à n'importe quel outil d'inspecteur Web (intégré à tous les navigateurs maintenant). Tout contrôle côté client aura toujours ses données publiquement disponibles sous une forme ou une autre. – Terry