0

如果 [ Required ] 属性修饰了我的 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 方法来实现这种类型的功能?

4

2 回答 2

2

是的,这是可能的,但总的来说我不会推荐它,因为模板确实可以自定义类型渲染,并且您应该能够创建模板而不必担心它是否会覆盖另一个模板。

相反,我会创建一个自定义的 LabelFor 帮助器,例如这里描述的那个:

http://weblogs.asp.net/imranbaloch/archive/2010/07/03/asp-net-mvc-labelfor-helper-with-htmlattributes.aspx

或在这里:

http://weblogs.asp.net/raduenuca/archive/2011/02/17/asp-net-mvc-display-visual-hints-for-the-required-fields-in-your-model.aspx

第三种选择是不在 MVC 中做任何事情,而是添加一些 javascript 来添加基于标准 MVC 验证数据属性的指标(如果您使用不显眼的验证)。在这里查看答案:

https://stackoverflow.com/a/8524547/61164

于 2013-03-13T03:53:47.180 回答
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 (replace) 代码块中清空它:

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]属性测试了这个,但它有效。我也很确定您也可以使用它来生成其他东西,而不仅仅是图像。

于 2013-03-13T04:02:15.133 回答