1
正如标题所述:剃须刀如何知道页面何时应该呈现错误或正常状态?Razor如何知道何时呈现错误状态的页面?
我需要知道这些信息,所以我可以在显示验证信息的错误模式下显示页面。不幸的是,我不能简单地做View()
,因为找到处于无效状态的模型的代码在子视图中。
编辑
我试图做这样的事情,迫使剃刀渲染错误模式的视图:
// just for tests....
// model: a model which was marked as invalid in different controller
// state: state of the model from that controller
public ActionResult asdf(TModel model, ModelStateDictionary state) {
var result = View(this.Partial, model);
result.ViewData.ModelState.Clear();
foreach (var x in state) {
result.ViewData.ModelState.Add(x.Key, x.Value);
}
return result;
}
EDIT2
最终的解决方案。在从Json的上一次尝试自动反序列化到C#的类型没有工作,所以我决定接受一个普通的JSON字符串,并与像这样另一个库反序列化(原文如此!):
public ActionResult ErrorIndex(string jsonParamsString) {
var param = Newtonsoft.Json.JsonConvert.DeserializeObject<ForceInvalidStateRequestArg<TModel>>(jsonParamsString);
if (param != null && param.Errors != null) {
this.ModelState.Clear();
foreach (var s in param.Errors) {
this.ModelState.AddModelError(s.PropertyName, s.ErrorMessage);
}
}
var result = View(this.PartialName, param == null ? this.NewModel : param.Model);
return result;
}
我编辑我的问题。我添加了一个代码片段,我正在尝试做什么。你能再看一次吗? – SOReader
您的编辑没有帮助。如果我使用ajax动态加载子页面(这个'asdf')会有什么区别吗? – SOReader
我认为不是。你应该在我的更新中使用'AddModelError'。 – mipe34