可以根据条件使用相同的@ Html.ValidationMessageFor

时间:2018-03-21 00:55:08

标签: asp.net-mvc

我有2个文本框,如果字段为空,则要进行验证。但是,我想根据条件不同地显示消息。

//在我的模型中

 [Required(ErrorMessage ="Please enter Name")]
    public string txtName { get; set; }

    [Required(ErrorMessage = "Address")]
     public string txtAddress { get; set; }

//在第一个视图中,出现两个文本框,因此消息应为“请输入姓名/地址”

 @Html.ValidationMessageFor(m => m.txtName, "", new { @class = "error" })
  @Html.ValidationMessageFor(m => m.txtAddress, "", new { @class = "error" })

//在第二个视图中,仅显示地址文本框,因此消息应为“请输入地址”

 @Html.ValidationMessageFor(m => m.txtAddress, "", new { @class = "error" })

我不知道如何实现这一点.Anyoe有任何想法然后请分享。谢谢。

2 个答案:

答案 0 :(得分:2)

根据你的评论你可以做点什么,但主要原则应该是一个" id"每页,ViewModel中的DataAnnotations与该一个输入相关联。必须解决这个问题,这有力地表明应该审查页面的设计。

您可以考虑:

(i)文本输入(注意TextBoxFor和TextBox):

@Html.TextBoxFor(m => m.txtAddress, new { @class = "some-class" })
@Html.ValidationMessageFor(m => m.txtAddress, "", new { @class = "error" })
// txtAddressTwo takes the value assigned to txtAddress in the ViewModel:
@Html.TextBox("txtAddressTwo", Model.txtAddress, new { @class = "some-class" })
@Html.ValidationMessage("txtAddressTwo", null, new { @class = "error" })

(ii)使用jQuery设置txtAddressTwo的验证规则:

$(function () {
    $("#txtAddressTwo").rules("add", {
        required: true,
        messages: {
            required: "xxx Please enter Address xxx"
        }
    });
});

(iii)在提交表格时协调价值(不是很好的做法)

$(function () {
    $("#your-form-id").on("submit", function () {
        // Work out the appropriate reconciliation using
        var a = $("#txtAddress").val();
        var b = $("#txtAddressTwo").val();
        // For example (or something similar (very hacky))
        if ($("#txtAddress").val() === "") {
            $("#txtAddress").val($("#txtAddressTwo").val());
        }
    });
});

我无法帮助,但我认为必须有一些特殊的理由需要以这种方式解决它,我真的建议重新审视您对ViewModel中只有一个条目的限制。< / p>

无论如何,我希望这会有所帮助,让您走上解决方案的道路。

答案 1 :(得分:1)

有一个(快速和肮脏)的工作环境。在第二个视图中,使用带有jquery验证属性的普通html而不是usind @ Html.EditorFor(m =&gt; m.txtAddress)。

示例:

 <input name="txtAddress" class="text-box single-line input-validation-error" 
        id="txtAddress" 
        type="text" value="" 
        data-val-required="Please enter Address" data-val="true">

请注意包含实际消息的data-val-required属性的用法。