我有一个包含对象的viewModel。我为该对象定义了一个自定义编辑器模板,该模板允许我编辑该对象的每个子对象。子值不是必需的服务器端(所以我没有任何必需的注释),但是如果用户达到这个特定的输入,它应该是必需的。MVC4中自定义编辑器模板的客户端验证
有没有什么办法可以在POST方法中检查这些子对象的值(在viewModel中),并在视图中返回一些错误(如果它们为null)?
我正在使用剃刀。
我有一个包含对象的viewModel。我为该对象定义了一个自定义编辑器模板,该模板允许我编辑该对象的每个子对象。子值不是必需的服务器端(所以我没有任何必需的注释),但是如果用户达到这个特定的输入,它应该是必需的。MVC4中自定义编辑器模板的客户端验证
有没有什么办法可以在POST方法中检查这些子对象的值(在viewModel中),并在视图中返回一些错误(如果它们为null)?
我正在使用剃刀。
你可以做的是写这将是检查用户输入(在这一领域的变化)
的功能,如果用户到达这个特定输入
,如果用户到达该您使用jQuery的特定输入将@class = "required"
HTML属性添加到您的对象。从那一刻起它将变为required
看一看here:这是基于某些条件的必填字段的jQuery验证程序。我想,这正是你追求的
编辑
你的其他选择是使用AJAX回到服务器来验证你在找什么。例子是here
希望这是有道理的,对你有帮助。
非常感谢。如果元素已经定义了一个类,那我还有什么替代方法,我不能改变? – RobVious 2013-03-11 23:17:51
此外 - 我有兴趣检查viewModel serverside以及以防万一他们POST没有JavaScript。你知道如何将模型传递回视图,同时让视图察觉到验证错误? – RobVious 2013-03-11 23:20:40
当然。你使用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
在服务器端,您可以检查类的子对象在你的行动,
[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("...");
}
}
是否使用纯剃刀语法或敲除或HTML还是...? – 2013-03-11 22:22:38
剃刀 - 只是更新了我的问题,包括这个 – RobVious 2013-03-11 22:50:40
在标题中你提到“客户端验证”,但你在你的问题中说“在POST方法中,并返回一些错误的视图...”,这通常是在服务器端。你的意思是? – rae1 2013-03-12 00:24:26