Je fais peut-être quelque chose de complètement faux ici mais pour une raison quelconque les valeurs de cette forme que j'ai dans une de mes pages sont mises en cache après le premier post. Ce n'est pas un navigateur car même si j'ouvre un navigateur différent, les valeurs affichées sont toujours mises en cache.ASP.NET MVC: les valeurs de formulaire sont mises en cache après le premier message
Ma forme est très simple:
<form action="/post/save" method="post">
<label>Type here whatever you want, quick and without thinking</label>
<%= Html.TextArea("Body", new { @class = "post", rows="3" })%>
<input type="submit" value="Publish" class="big_button red" />
</form>
Mon action du contrôleur est encore plus simple:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(ArticleView form)
{
Article article = _ArticleViewMapper.Map(form);
article.UpdatedBy = "guest";
article.CreatedBy = "guest";
article.UpdatedOn = DateTime.Now;
article.CreatedOn = DateTime.Now;
CMSFactory.CMS.ArticleRepository.Save(article);
return RedirectToAction("Index", "Home");
}
L'objet de formulaire ne dispose que d'une pièce d'identité et une propriété du corps. Tout en haut de la méthode, cet objet a le corps de la requête précédente (en fait la première). Y at-il une mise en cache que je ne connais pas? thx
EDIT:
Je trouve que l'origine du problème est la façon dont j'enregistrer mes contrôleurs. Dans mon Application_Start je le code suivant:
// This only initialized the Castle IOC container
DependencyRegistrat.Init();
DependencyRegistrat.GetDefaultContainer().RegisterAll<IController>(typeof(HomeController).Assembly, ComponentLifecycle.Transient);
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory(DependencyRegistrat.GetDefaultContainer()));
MyControllerFactory est comme suit:
protected override IController GetControllerInstance(Type controllerType)
{
Check.IsNotNull(controllerType, "The given controller type was null, but must be provided");
return (IController) _Container.Resolve(controllerType);
}
public override void ReleaseController(IController controller)
{
var disposable = controller as IDisposable;
if (disposable != null) disposable.Dispose();
_Container.Release(controller);
}
}
De retour un contrôleur singleton au lieu d'une nouvelle instance par requête est une erreur courante lors de l'écriture d'une usine de contrôleur. Le MVC 2 Preview 2 récemment publié vérifie cette condition et affiche une erreur décrivant la solution, de sorte que les futurs développeurs ne devraient pas rencontrer ce même problème. Oubliez le code d'accès aux données – Levi