2015-12-29 98 views
1

我有一個控制器,並在那裏我將錯誤(例外)添加到ModelState。在試圖通過Html.ValidationMessage()顯示消息時,在視圖中顯示消息。誰能幫我這個?Html.ValidationMessage不顯示消息

控制器:

public ActionResult FooMeth() 
{ 
    .... 
    if(cond == false) 
    { 
    ModelState.AddModelError("mykey","mymessage"); 
    } 
    .... 
    return View("fooView",mymodel); 
} 

查看:

@Html.TextBox("foo") 
@Html.ValidationMessage("mykey") 

而不是顯示 「mymessage」 的將空白always.Can有人告訴我什麼是這背後的原因是什麼?

+0

你從行動返回什麼?你能證明嗎? –

+0

你在添加'ModelState.AddError'後返回什麼。 –

+0

設置驗證摘要true @ html.validationmessagefor(model => model.mykey) 它可以爲您或更好地存儲在tempdata或viewbag中,因爲modelstate會爲每個新請求創建錯誤,因此可能會丟失數據 –

回答

0

嘗試根據您的視圖模型屬性使用視圖模型在您的視圖,然後你可以用剃刀助手:

@Html.TextBoxFor(m => m.Foo) 
@Html.ValidationMessageFor(m => m.Foo) 

並添加到您的視圖,這樣它會顯示驗證結果

@Html.ValidationSummary(true) 
+0

使用這條語句有什麼不對。 'ModelState.AddModelError(「mykey」,「mymessage」);'它也會顯示錯誤。 –

+0

@AmitKumar一個在動作中(添加錯誤)另一個在視圖中(顯示它) – Basic

0

我認爲最好的選擇是使用模型和數據註釋。 或使用ViewBag顯示錯誤文本。我也看到你正在發送mymodel 到視圖,但它尚未被聲明。

ViewBag方法:

C#:

using MyProject.Models; 

public ActionResult FooMeth(MyModel model) 
{ 
    if (cond == false) 
    { 
     // If failed, return input data and display error. 
     ViewBag.ServerReply = "My Message."; 
     return View(model); 
    } 
    // If successful return to black page. 
    return View(); 
} 

HTML:

@Html.TextBoxFor(m => m.Foo) 
@ViewBag.ServerReply 

或者你可以只使用模型的驗證與數據註釋:

型號&數據註釋方法:

using System.ComponentModel.DataAnnotations; 

public class MyModel 
{ 
    [Required(ErrorMessage = "Please fill in text box.")] 
    [StringLength(62, ErrorMessage = "Text must be {0} characters or less.")] 
    public string Foo { get; set; } 
} 

C#

using MyProject.Models; 

public ActionResult FooMeth(MyModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Code here if successful. 
    } 
    // If model is not valid return model with error messages. 
    return View(model); 
} 

HTML:

@Html.TextBoxFor(m => m.Foo) 
@Html.ValidationMessageFor(m => m.Foo) 
0

如果以上的答案沒有工作你的情況,請嘗試以下

1)看,如果不唐突的js加載
2)添加新的AjaxOptions {InsertionMode = InsertionMode.Replace,UpdateTargetId =「IdXXX」}爲Ajax.BeginForm和內部形式show @ Html.ValidationSummary或​​消息