Html.ValidationMessage未显示该消息
本文关键字:消息 显示 ValidationMessage Html | 更新日期: 2023-09-27 18:28:26
我有一个控制器,其中我将错误(异常)添加到ModelState
。在视图中,当我尝试通过Html.ValidationMessage()
显示消息时,它不会显示消息。有人能帮我吗?
控制器:
public ActionResult FooMeth()
{
....
if(cond == false)
{
ModelState.AddModelError("mykey","mymessage");
}
....
return View("fooView",mymodel);
}
视图:
@Html.TextBox("foo")
@Html.ValidationMessage("mykey")
它将始终为空,而不是显示"mymessage"。有人能告诉我这背后的原因吗?
尝试在视图中使用ViewModel,然后可以根据ViewModel属性使用Razor Helper:
@Html.TextBoxFor(m => m.Foo)
@Html.ValidationMessageFor(m => m.Foo)
并将其添加到您的视图中,这样它将显示验证结果
@Html.ValidationSummary(true)
如果以上答案在您的案例中不起作用,请尝试以下
1) 查看是否正在加载不引人注目的js
2) 添加新的AjaxOptions{InsertionMode=InsertionMode.Replace,UpdateTargetId="IdXXX"}用于Ajax.BeginForm和内部表单show@Html.ValidationSummary或Message
我认为最好的选择是使用模型和数据注释。或者使用ViewBag显示错误文本。我还看到你正在发送我的模型到视图,但尚未声明。
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)