Razor如何知道何时在错误状态下渲染页面
本文关键字:状态 错误 何知道 何时 Razor | 更新日期: 2023-09-27 17:53:27
如标题所述:razor如何知道页面何时应该以错误状态或正常状态呈现?
我需要知道这个信息,这样我就可以在错误模式下显示一个页面,显示验证消息等。不幸的是,我不能简单地做View()
,因为在子视图中发现模型处于无效状态的代码。
编辑
我试图做这样的事情,迫使razor在错误模式下渲染视图:
// 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#类型的自动反序列化没有工作(sic!),所以我决定接收一个普通的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;
}
模型有效性信息存储在ModelState
对象中。
可在控制器中访问,如:
this.ModelState.IsValid
在视图:this.ViewContext.ViewData.ModelState
致您的编辑:
你可以像这样添加模型验证错误:
this.ModelState.AddModelError("key", "an error message");
所以如果你想强制@razor呈现验证错误消息。它可能看起来像:
public ActionResult asdf(TModel model, ModelStateDictionary state)
{
var result = View(this.Partial, model);
result.ViewData.ModelState.Clear();
foreach (var pair in state.Where(m=> m.Value != null && m.Value.Errors.Any()))
{
result.ViewData.ModelState.AddModelError(pair.Key, string.Join(",",pair.Value.Errors.Select(e=>e.ErrorMessage).ToArray()));
}
return result;
}