MVC4中自定义编辑器模板的客户端验证

时间:2013-03-11 21:48:18

标签: asp.net-mvc asp.net-mvc-3 razor asp.net-mvc-4 mvc-editor-templates

我有一个包含对象的viewModel。我已经为该对象定义了一个自定义编辑器模板,它允许我编辑该对象的每个子节点。子值不是serveride所必需的(因此我没有任何必需的注释),但是如果用户到达此特定输入,则应该是必需的。

有什么方法可以在POST方法中检查这些子对象的值(在viewModel中),如果它们为null,则返回一些错误给视图?

我正在使用Razor。

2 个答案:

答案 0 :(得分:1)

在服务器端,您可以检查操作中类的子对象,

[HttpPost]
public ActionResult Edit(MyClass myClass)
{
    if (myClass.Children.Any(child => child == null))
    {
        foreach(var child in myClass.Children
            .Where(child => child == null)
            .Select((item, index) => new { Item = item, Index = index))
        {

             ModelState.AddModelError(
                 string.Format("Children[{0}]", child.Index), 
                 "Must be required");
        }

        return this.View("...");
    }
}

答案 1 :(得分:0)

您可以做的是编写一个检查用户输入的函数(在该字段中进行更改)

  

如果用户到达此特定输入

如果用户到达该特定输入,则使用jQuery将@class = "required" HTML属性添加到对象中。从那一刻起,它将成为required

看看here:这是基于某些条件的必需字段的jQuery验证器。我认为这正是你追求的目标

修改

您的另一个选择是使用AJAX返回服务器以验证您要查找的内容。示例是here

希望这是有道理的,对你有帮助。