验证不适用于MVC 5中的Ajax调用

问题描述

我正在尝试使用ajax调用调用控制器操作方法,但是客户端和服务器端验证似乎不起作用。 当我不使用ajax调用时,可以进行验证工作,但不能使用这种方法。 请问有人可以帮助我解决这个问题吗?

@model iSolve.Models.Configuration.Productsviewmodel
@{
    ViewData["Title"] = "runcase";
}
<h1>runcase</h1>
<div class="container-fluid pt-1">
    <div class="col-lg-12">
        @using (Html.BeginForm("runcase","CallService",FormMethod.Post,new { @class = "container-fluid pt-1",id = "Runform" }))
        {
            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true)
            <div class="row">
                <div class="col-sm-6">
                    <form class="form-horizontal">
                        <!--Drop down list (Multi selection is allowed)-->
                        <fieldset class="form-group">
                            <label for="formGroupInputLarge1" class="col-sm-7 control-label">Products</label>
                            <div class="col-sm-7">
                                @Html.ListBoxFor(m => m.ProductId,(MultiSelectList)ViewBag.productinfo,new { multiple = "multiple",@class = "form-control",id = "productlist" })
                                @Html.ValidationMessageFor(m => m.ProductId,"",new { @class = "text-danger" })
                            </div>
                        </fieldset>
                        <fieldset class="form-group">
                            <label for="" class="col-sm-5 control-label ">Enter Run Number</label>
                            <div class="col-sm-7">
                                @Html.TextBoxFor(m => m.RunNumber,new { @class = "form-control",id = "runnum" })<!-- It should not be editable while process is running-->
                                @Html.ValidationMessageFor(m => m.RunNumber,new { @class = "text-danger" })
                            </div>
                        </fieldset>
                        <button type="button" class="btn btn-outline-primary" id="btnstart" name="buttonstart" value="start"><span>Start Run</span></button>
                        <button type="button" class="btn btn-outline-primary" id="btnstop" name="buttonstop" value="stop">Stop Run</button>
                        @Html.ActionLink("Export to CSV","Exporttocsv","CallService")
                    </form>
                </div>
            </div>
        }
    </div>
</div>
@section scripts{
    <script type="text/javascript">
            $(document).ready(function () {
                $("#btnstart").click(function (e) {
                    let productvals = $("#productlist").val();
                    let runnumber = $("#runnum").val();
                    let btnval = $("#btnstart").val();
                    e.preventDefault();
                    $.ajax({
                        url: "@Url.Action("CheckRunnumber","Validation")",type: "POST",dataType: "json",data: { runnumber: $('#runnum').val() },success: function (data) {
                            if (data.success == "True") {
                                console.log(data);
                                console.log(data.btnstartval);
                                //$("#Runform").submit();
                                $.ajax({
                                    url: "@Url.Action("runcase","CallService")",data: { products: productvals,runnumber: runnumber,button: data.btnstartval }
                                });
                            }
                            else {
                                e.preventDefault();
                                console.log(data);
                                console.log(data.btnstartval);
                                if (confirm("Run number you have entered is already exist.Do you wish to Rerun?")) {
                                    console.log(data.btnstartval);
                                    $.ajax({
                                    url: "@Url.Action("runcase",button: data.btnstartval }
                                });
                                } else {
                                    e.preventDefault();
                                }
                            }
                        },error: function (data) {
                        }
                    });

                });
    </script>
}

下面是viewmodel类。如大家所见,我已将数据注释应用于属性

public class Productsviewmodel
    {
        [required(ErrorMessage = "Please select at least one Product")]
        public List<string> ProductId { get; set; }
        [required(ErrorMessage = "Please enter a run number")]
        [MaxLength(8)]
        [RegularExpression("^[0-9]*$",ErrorMessage = "Run number must be numeric only")]
        public string RunNumber { get; set; }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)