使用数据批注在 Razor 页面中进行条件远程验证

Conditional remote validation in razor pages using data annotation

提问人:Teena 提问时间:3/10/2022 最后编辑:Yiyi YouTeena 更新时间:3/10/2022 访问量:208

问:

我必须根据另一个字段输入来验证一个字段。 如果字段 A 不为空,则应填写字段 B。 目前这个表单在一个选项卡内,所以当我进行javascript验证时,它正在导航到第一个选项卡。 这是我的模型类代码

    //--WorkpassType ---//
    //[Required(ErrorMessage = "Please Select WorkPass Type")]
    [Display(Name = "WorkPass Type"), StringLength(20)]
    public string WorkpassType { get; set; }

    //--Workpass Expiry Date ---//
    //[Required(ErrorMessage = "Please Select WorkPass Expiry Date")]
    [Display(Name = "WorkPass Expiry Date")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    [DataType(DataType.Date)]
    public DateTime? WorkpassExpiryDate { get; set; }

索引.cshtml

    <form method="post" id="FormBiodata" enctype="multipart/form-data">
        <partial name="_BioData" />
        <div class="form-group row">
            <div class="col-sm-10" style="margin-left:800px;">
                <input type='submit' class='btn btn-success' value='Save' />
                <input type="submit" id="BtnSubmit" asp-page-handler="InsertBioData" style="display:none;" />
            </div>
        </div>
    </form>

Javascript 验证

     $('#FormBiodata').submit(function () {

        if ($('#DropDownWorkPassType').val()) {
            if ($('#WorkPassExpiryDate').val() == null) {
                $("#SpanWorkPassExpiryDate").html("Please Enter WorkPass Expiry Date");
                $('#myTab li:nth-child(@Model.currentTab) a').tab('show')
                return false;
            }
        }
        else {
            $("#BtnSubmit").click();
        }
    });

任何帮助将不胜感激。谢谢!

asp.net-core 选项卡 razor-pages 远程验证

评论

0赞 Yiyi You 3/10/2022
在输入中输入数据并失去焦点后,它将转到 PageRemote 属性中定义的处理程序。因此,单击提交按钮时不会检查数据。你最好使用 js 而不是远程验证。
0赞 Teena 3/10/2022
@YiyiYou但是当我单击“提交”按钮时,页面会重新加载到第一个选项卡,并且上面的代码未显示错误消息。

答:

0赞 Yiyi You 3/10/2022 #1

尝试在表单中提交js:e.preventDefault();

 <form method="post" id="FormBiodata" enctype="multipart/form-data" asp-page-handler="InsertBioData">
        <partial name="_BioData" />
        <div class="form-group row">
            <div class="col-sm-10" style="margin-left:800px;">
                <input type='submit' class='btn btn-success' value='Save' />
            </div>
        </div>
    </form>

js:

$('#FormBiodata').submit(function (e) {
        e.preventDefault();
        if ($('#DropDownWorkPassType').val()) {
            if ($('#WorkPassExpiryDate').val() == null) {
                $("#SpanWorkPassExpiryDate").html("Please Enter WorkPass Expiry Date");
                
            }
        }
        else {
            this.submit();
        }
    });