0

I am trying to call controller action method using ajax call but client side and server side validation seems not working. When I don't use ajax call then validation work find but not with this approach. Please can anyone help me with this issue?

@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")",
                                    type: "POST",
                                    dataType: "json",
                                    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", "CallService")",
                                    type: "POST",
                                    dataType: "json",
                                        data: { products: productvals, runnumber: runnumber, button: data.btnstartval }
                                });
                                } else {
                                    e.preventDefault();
                                }
                            }
                        },
                        error: function (data) {
                        }
                    });

                });
    </script>
}

Below is the viewmodel class. As you guys can see I have applied data annotation to the properties.

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; }
    }
Neu
  • 167
  • 3
  • 15

0 Answers0