如何在初始GET上向用户显示ModelState验证消息

时间:2014-12-19 14:58:21

标签: c# validation modelstate

好的,所以我工作的人都希望在初始加载时立即显示表单验证消息。在我的ViewModel中,我有我所需要的所有内容等...通常会在POST上受到影响,那么如何强制在GET上进行验证,以便用户在首次输入表单时看到这些验证消息?

我已经尝试了

ValidateModel(viewModel);

TryValidateModel(viewModel)

但这些都不起作用。那么有一个简单的方法吗?

所以我有这样的事情:

[HttpGet]
public ActionResult Index()
{
    var viewModel = new RandomVieModel();

    ValidateModel(viewModel); //For example

    return View(viewModel);
}

[HttpPost]
public ActionResult Index(RandomViewModel viewModel)
{
    if(!ModelState.IsValid)
    {
        return View(viewModel);
    }

    return RedirectToAction("SomethingNew);
}

这是我的视图模型的一个示例:

public class RandomViewModel
{
    [MaxLength(100)]
    [MinLength(3)]
    public string SomeRandomText { get; set; }

    [Required]
    public string RandomName { get; set; }
}

2 个答案:

答案 0 :(得分:1)

验证消息对初始GET有什么影响?由于没有任何“失败”(因为那些在POST上验证),将没有验证消息? (用户没有提供任何输入?)

如果您使用验证消息来指导用户如何提供值(“请输入字母数字邮政编码”),那么您确实应该不使用验证消息。那个应该永远存在的文字。如果您希望避免重复相同的文本消息,请使用资源文件。

如果这是一个临时的事情(你已经知道了),那么你所做的任何事情都将成为一个黑客。将其添加到HTML或更改控制器,以便始终检查模型的有效性:

public ActionResult Index(RandomViewModel viewModel)
{
    if (!ModelState.IsValid)
    {
        return View(viewModel);
    }

    if (Request.HttpMethod == HttpMethod.Post) 
    {
       return RedirectToAction("SomethingNew");
    } 
    else 
    {
       return View(viewModel);
    }

}

以上是GET和POST的动作方法。

答案 1 :(得分:1)

好的,我找到了一个临时解决方案。幸运的是它并非永远。

所以我发现jquery validate是一个可以使用的ok选项。它将在客户端触发验证。

<script type="text/javascript">
    $(document).ready(function () {
        $('#form-id').validate().form();
    });
</script>