好的,所以我工作的人都希望在初始加载时立即显示表单验证消息。在我的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; }
}
答案 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>