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"。有人能告诉我这背后的原因吗?

Html.ValidationMessage未显示该消息

尝试在视图中使用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)