2013-01-16 78 views
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; 
} 

回答

2

關於模型的信息有效性存儲在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; 
} 
+0

我編輯我的問題。我添加了一個代碼片段,我正在嘗試做什麼。你能再看一次嗎? – SOReader

+0

您的編輯沒有幫助。如果我使用ajax動態加載子頁面(這個'asdf')會有什麼區別嗎? – SOReader

+0

我認爲不是。你應該在我的更新中使用'AddModelError'。 – mipe34

相關問題