/ / Contrôleur gérant les données ActionResult et JSON? - jquery, asp.net-mvc-3, jquery-tokeninput

Le contrôleur gère-t-il les données ActionResult et JSON? - jquery, asp.net-mvc-3, jquery-tokeninput

OK - depuis mon contrôleur / créer, je souhaite mettre à jour mes 2 parties de mon modèle:

  • JOURNAL
  • AUTEUR

Le JournalCreate - créera un journal de base et interrogera également une table d'auteurs et remplira une zone de saisie semi-automatique avec des noms d'auteur (à l'aide de JQuery, tokenInput).

Cela fonctionne bien, jusqu'à présent, j'ai un formulaire vierge pour remplir les détails de mon journal et un excellent moyen de sélectionner un ou plusieurs auteurs.

Ce qui me laisse perplexe, c'est la façon dont je ramène les auteurs sélectionnés à mon contrôleur, car la signature est:

[HttpPost]
public ActionResult Create(JOURNAL journal)
{
//persist the journal object in the database ....

but where to get the authors that were picked in the input box??? and persist those
in the model?
}

Maintenant, j'ai essayé et j'ai découvert que je pouvais utiliser

Request.Form["authorlist"];

et cela récupère l'ID "(je ne sais pas trop comment?), mais ils sont tous réunis sans avoir de caractère de délimitation, donc cela n'a pas beaucoup de sens, par exemple

1564654324544434344797361679

CA devrait etre

1564,6543,2454,4434,3447,9736,1679

alors je peux tout faire avec les données.

Quoi qu'il en soit, si vous savez comment je peux récupérer les résultats de ma boîte de saisie d'une bien meilleure manière, ainsi qu'en utilisant l'objet modèle pour remplir la base de données, ce serait formidable.

Voici le code ci-dessous:

VUE

@using (Html.BeginForm()){
@Html.ValidationSummary(true)
<fieldset>
<legend>JOURNAL</legend>
<div class="editor-label">
@Html.LabelFor(model => model.TITLE)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TITLE)
@Html.ValidationMessageFor(model => model.TITLE)
</div>
<div class="editor-label">
Select Authors</div>
<div class="authors">
<div class="editor-field">
<input type="text" id="authorlist" name="q"/>
</div>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}

JAVASCRIPT

  $("#authorlist").tokenInput("/author/getauthors/", {
hintText: "Enter surname please..",
searchingText: "Searching...",
preventDuplicates: true,
allowCustomEntry: true,
highlightDuplicates: false
});

CONTROLLER (obtient une liste d'auteurs)

public JsonResult GetAuthors(string term)
{
Debug.WriteLine("Term is: " + term);
term = term.ToUpper();
var authors = db.AUTHOR
.Where(a => a.FULL_NAME.ToUpper().StartsWith(term))
.Select(a => new { id = a.AUTHOR_ID, name = a.FULL_NAME });
return Json(authors, JsonRequestBehavior.AllowGet);
}

Réponses:

0 pour la réponse № 1

Placer comme paramètre en action:

[HttpPost]
public ActionResult Create(JOURNAL journal, FormCollection collection)
{
//persist the journal object in the database ....

var authors = collection["q"]; // gets by name
}