如果[必需]属性修饰了我的ViewModel属性,我想要做的是在输入文本框之后自动添加图像范围,无论是整数,双精度,字符串,日期等等
例如,我的ViewModel可能看起来像
public class MyViewModel
{
[Required]
public string Name { get; set; }
}
我的视图看起来像
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
,输出类似于
<input id="Name" class="text-box single-line" type="text" value="" name="Name" data-val-required="The Name field is required." data-val-length-max="20" data-val-length="The field Name must be a string with a maximum length of 20." data-val="true">
<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="Name"></span>
-- Note the automatically added span
<span class="indicator required" style="width: 11px;"></span>
我打算用一些css来显示图像,即
span.required {
background-image: url("required.png");
}
这是可能做的还是我需要创建自己的Helper方法来实现这种类型的功能?
答案 0 :(得分:2)
是的,这是可能的,但总的来说我不推荐它,因为模板真的可以自定义类型渲染,你应该能够创建模板而不必担心它是否会覆盖另一个模板。
我会改为创建一个自定义的LabelFor助手,例如这里描述的那个:
或在这里:
第三种选择是不在MVC中做任何事情,而是添加一些javascript,它将根据标准的MVC验证数据属性添加指标(如果你使用的是不引人注意的验证)。请参阅答案:
答案 1 :(得分:1)
我所做的是修改jquery.validate.unobtrusive JS文件以添加第二个容器,特别是对于您的图像,如果存在验证错误。
var container2 = $(this).find("[data-valimg-for='" + escapeAttributeValue(inputElement[0].name) + "']"),
replace = $.parseJSON(container.attr("data-valimg-replace")) !== false;
container2.removeClass("img-validation-valid").addClass("img-validation-error");
然后不要忘记将它绑定到模型:
error.data("unobtrusiveContainer", container2);
最后,在if(替换)代码块中清空它:
if (replace) {
container.empty();
container2.empty();
error.removeClass("input-validation-error").appendTo(container);
}
else {
error.hide();
}
成功时,请记住隐藏它:
var container2 = error.data("unobtrusiveContainer"),
replace = $.parseJSON(container.attr("data-valimg-replace"));
if (container2) {
container2.addClass("img-validation-valid").removeClass("img-validation-error");
error.removeData("unobtrusiveContainer");
if (replace) {
container2.empty();
}
}
如果您查看文件中的onError和onSuccess函数,您应该能够找到可以放入它们的位置。
在您的视图中,将以下代码行添加到每个表单输入中,并对其进行验证:
<img class="img-validation-valid" data-valimg-replace="true" data-valimg-for="<replace with field name here, ie. Name>" src="required.png" />
我只使用[Required]
属性对其进行了测试,但它确实有效。我也很确定你也可以使用它来生成其他东西,而不仅仅是图像。