我的模型有2个字段,“a”和“b”,如下所示:
class AbModel
{
public string a {get;set;}
[SomeValidation]
public int b {get;set;}
}
现在“b”实际上隐藏在gui中,“a”显示了它的文本表示。
<div class="editor-field">
<%= Html.HiddenFor(model => model.b, new { id = "ABModelEditor_b" })%>
<%= Html.TextBoxFor(model => model.a, new { id = "ABModelEditor_a" })%>
<input type="button" value="Change" onclick="AbModelEditorScript.showAbSelector(); return false;" />
</div>
使用空数据“保存”时生成以下内容:
<div class="editor-field">
<input class="input-validation-error" id="ABModelEditor_b" name="b" type="hidden" value="">
<input id="ABModelEditor_a" name="a" type="text" value="">
<input type="button" value="Change" onclick="AbModelEditorScript.showAbSelector(); return false;" />
</div>
我需要将input-validation-error css类附加到“a”文本框而不是隐藏为“b”。
在我简单地使用jquery-script移动css-class之前,还有其他一些我应该考虑的方法,也许是一些内置的功能?
答案 0 :(得分:1)
您使用不引人注目的验证吗?另一个选项是使用jQuery添加验证属性并重新验证表单...
$("#ABModelEditor_a").attr("data-val-required", "true"); //add your validation attributes to the input tag
var form = $("form");
form.removeData("validator").removeData("unobtrusiveValidation") // this will clear the validation from the form
$.validator.unobtrusive.parse(form); //reattach the validation
这将为您提供真正的客户端验证,但它仍然与您的模型不匹配。你必须填补服务器端的空白。
关于您对仅服务器端验证的评论。
您可以尝试手动将模型错误添加到模型状态。这应该在您返回时反映在您的视图中。
ModelState.AddModelError(string key, string errorMessage);