Я мог бы сделать что-то совершенно не так, но по какой-то причине значения этой формы, которые я имею на одной из моих страниц, кэшируются после первого поста. Это не браузерная вещь, потому что даже если я открою другой браузер, отправленные значения все еще будут кэшированы.
Моя форма очень проста:
<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>
Действие моего контроллера еще проще:
[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");
}
Объект формы имеет только идентификатор и свойство Body. Прямо в верхней части метода этот объект имеет тело предыдущего (фактически первого) пост-запроса. происходит ли кеширование, с которым я не знаком? ТНХ
EDIT:
Я обнаружил, что источником проблемы является способ регистрации контроллеров. В моем application_start у меня есть следующий код:
// 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 выглядит следующим образом:
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);
}
}