J'ai un contrôleur appelé ProductController. Le code du contrôleur est ci-dessous:ASP.NET MVC 2.0 - données dans ViewModel perdues après publication
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Services.Abstract;
using Web.Models;
using Ninject;
using Services.Entities;
namespace Web.Controllers
{
public class ProductController : Controller
{
IProductRepository productRepository;
public ProductController(IProductRepository products)
{
productRepository = products;
}
[HttpGet]
public ActionResult Create() {
Product p = new Product {
Id = 5
};
string theTitle = "The Title";
var viewModel = new ProductViewModel {
Product = p,
TheTitle = theTitle
};
return View(viewModel);
}
[HttpPost]
public ActionResult Create(ProductViewModel pvm) {
if (ModelState.IsValid) {
int result = productRepository.SaveProduct(pvm.Product);
return Content(result.ToString());
}
else {
return View(pvm);
}
}
}
}
J'utilise le modèle ViewModel d'envoyer différents bits d'information à la vue. Par exemple, j'envoie un produit avec un Id par défaut fixé à 5, et je mets également une propriété title [A part: ce n'est pas un code de production - juste des données de test :-)]
Tout va bien jusqu'ici. Lorsque/Product/Create est appelé pour la première fois, ma propriété Title est affichée dans la vue et l'ID de produit par défaut est 5. Toutefois, lorsque je publie le formulaire, seules les informations sur le produit sont conservées. Si ModelState n'est pas valide, j'affiche de nouveau la vue à l'utilisateur. Cependant, cette fois-ci, le titre ne s'affiche pas (il est défini sur null). Le produit s'affiche comme prévu cependant.
Si possible, je souhaite renvoyer le titre d'origine à la vue lorsque ModelState n'est pas valide. Est-il possible de le faire sans utiliser Session, ViewData et TempData?
Cordialement, et merci à l'avance
Est-ce que vous définissez le titre sur le formulaire ... lorsque vous publiez ... si vous n'êtes pas ... essayez de le redéfinir sur quelque chose par défaut dans la vue avant de le poster ... – Vishal
Non. Ne pas essayer de définir le titre sur le formulaire. Mon exemple ci-dessus était probablement un peu stupide, en ce sens que vous n'enverriez probablement jamais quelque chose comme un titre à une vue via un ViewModel. Cependant, je peux voir une situation où je devrai passer d'autres choses au ViewModel qui devront être conservées entre les publications. –
Hmm..tout ce que je peux penser à des champs cachés pour conserver des infos ... mais j'ai fait poster des viewmodels d'une action à l'autre ... ça devrait marcher à moins que ... peut-être quelques problèmes de noms ... mvc est assez bizarre parfois ... peut-être inclure ce que vous essayez de faire sur la vue? – Vishal