0

我有一个包含对象的viewModel。我为该对象定义了一个自定义编辑器模板,该模板允许我编辑该对象的每个子对象。子值不是必需的服务器端(所以我没有任何必需的注释),但是如果用户达到这个特定的输入,它应该是必需的。MVC4中自定义编辑器模板的客户端验证

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

我正在使用剃刀。

+0

是否使用纯剃刀语法或敲除或HTML还是...? – 2013-03-11 22:22:38

+0

剃刀 - 只是更新了我的问题,包括这个 – RobVious 2013-03-11 22:50:40

+0

在标题中你提到“客户端验证”,但你在你的问题中说“在POST方法中,并返回一些错误的视图...”,这通常是在服务器端。你的意思是? – rae1 2013-03-12 00:24:26

回答

0

你可以做的是写这将是检查用户输入(在这一领域的变化)

的功能,如果用户到达这个特定输入

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

看一看here:这是基于某些条件的必填字段的jQuery验证程序。我想,这正是你追求的

编辑

你的其他选择是使用AJAX回到服务器来验证你在找什么。例子是here

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

+0

非常感谢。如果元素已经定义了一个类,那我还有什么替代方法,我不能改变? – RobVious 2013-03-11 23:17:51

+0

此外 - 我有兴趣检查viewModel serverside以及以防万一他们POST没有JavaScript。你知道如何将模型传递回视图,同时让视图察觉到验证错误? – RobVious 2013-03-11 23:20:40

+0

当然。你使用AJAX来做到这一点。看这里例如http://blog.bobcravens.com/2009/11/ajax-calls-to-asp-net-mvc-action-methods-using-jquery/。你是对的,你可以在客户端做任何事情,因为我建议使用AJAX调用服务器 - 这是另一种选择。对于你的第一个问题 - 你可以用jQuery来改变任何类,你可以用$找到这个元素,并将它的类设置为你想要的任何东西,在这种情况下请求。 – 2013-03-11 23:35:38

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("..."); 
    } 
} 
相关问题