J'aimerais prendre les données saisies dans un formulaire utilisateur MVC et les afficher dans une vue différente.
La classe possède la variable privée suivante :
IList<string> _pagecontent = new List<string>();
L'action suivante accepte un objet FormCollection, le valide, et le transmet à la vue "Preview" sous forme de liste :
[Authorize(Roles = "Admins")]
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateContent(FormCollection collection)
{
if (ModelState.IsValid)
{
string PageToInsert = collection["PageToInsert"];
string PageHeader = collection["PageHeader"];
string PageBody = collection["PageBody"];
//validate, excluded...
_pagecontent.Add(PageToInsert);
_pagecontent.Add(PageHeader);
_pagecontent.Add(PageBody);
}
return RedirectToAction("Preview", _pagecontent);
}
La vue Aperçu a la directive de page suivante pour passer une liste d'objets fortement typés :
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Template.Master" Inherits="System.Web.Mvc.ViewPage<List<string>>" %>
Je m'attendrais à pouvoir utiliser l'objet Modèle pour obtenir mes données, mais hélas je ne peux pas. À la ligne suivante, j'obtiens un error index out of bounds
exception, précisant que l'indice doit être non négatif et inférieur à la taille de la collection :
<% if (Model[0].ToString() == "0") { %>
Et des paramètres étranges ont été ajoutés à l'URL, car elle se résout en http://localhost:1894/Admin/Preview?Capacity=4&Count=3
J'ai donc deux questions :
- Lorsque j'appelle RedirectToAction et lui passe ma liste, pourquoi est-elle inaccessible dans l'objet Model de la vue ?
- Quelle est la bonne façon de procéder pour faire ce que j'essaie de faire, à savoir passer une collection de chaînes à une vue pour qu'elle les affiche ?