2012-04-02 51 views
3

我对模型验证有一个小问题。使用自动填充字段进行MVC验证

我有一个名为“theID”的隐藏字段和一个名为“theDesc”的文本框。该字段theDesc是一个自动完成,当我选择它时,ID获取存储的ID。

theID是存储在数据库中的字段,并且是一个那就是“该电源线”,所以我用:@ Html.ValidationMessage(“theID”)

的问题是,CSS类输入 - 验证错误被分配给隐藏字段。我现在这种行为是正常的和预期的,但有一种方法可以改变这种情况?

我想完成的是theDesc字段显示输入错误类。这样用户可以注意到缺少。

这不是什么大不了的事情,但是我的强迫症使我疯狂地想要以同样的风格得到所有的错误。

+0

我希望的“开箱即用”的解决方案,而不是一个自定义JavaScript或类似解。我有很多形式。 – epaulk 2012-04-02 14:53:22

+0

如果ID是隐藏字段总是那么你可以考虑删除所需的属性 – swapneel 2012-04-02 14:58:48

+0

我编辑的帖子,使其更清晰。 – epaulk 2012-04-02 15:26:56

回答

0

在您的自动完成的更改事件将该值分配给您的隐藏字段。

2

好问题和很好的措辞!我有完全相同的问题,但还没有确定的答案。我设法做到了 - 至少在服务器端验证 - 通过在控制器中添加服务器端验证,并在视图中使用HTML助手而不是自定义HTML。这篇文章让我:

.input-validation-error to a textbox when the form is redisplayed for failed value

由于帖子中提到,有必要设定的HTML例如名称模型字段正确。所以我在控制器中添加了一些服务器端验证代码。注意检查现场model.theID是如何从ModelState中“TheDesc补充说:”名字不同:

控制器代码:

public ActionResult SomeActionIndex(SomeModel model) { 
    ... 
    if (string.IsNullOrEmpty(model.theID) { 
     ModelState.AddModelError("theDesc", "The field is uhm... required!"); 
    } 
    ... 
} 

在文章的评论表明,对于通过CSS高亮(红色边框类),它有助于使用标准的HTML帮助器,因为它们自动启用了jQuery验证。 在我的情况下,经过验证的自动完成列表最初不是使用HTML助手生成的,而是使用嵌套视图内的一些自定义HTML生成的。我改变了这一点。

查看代码:

@Html.TextBoxFor(m => Model.theDesc, new { @class="auto-complete", 
@placeholder="choose a value..." }) 

@Html.TextBoxFor(m => Model.theID, new { @style = "display: none" }) 

注:恰恰是在HTML佣工做那种魔法,使这项工作我一直没能尚未搞清楚。所以我会离开它,直到后来,还是为别人,但我认为这个问题涉及到它:

custom htmlhelper with validation support