Как запустить проверку на стороне сервера jquery, используя аннотации данных с использованием mvc5? - PullRequest
0 голосов
/ 01 апреля 2020

Я искал много часов в stackoverflow, но все ответы устарели или не работают. Я использую mvc5, и я использовал jquery .validate для проверки клиентской стороны для переменных для ajax post.

Я хотел бы знать, что если клиентская сторона работает не , и метод поста контроллера возвращает ошибку, тогда должно появиться сообщение об ошибке аннотации данных. Я видел много ответов для пользовательской проверки, однако я не хочу выполнить пользовательскую проверку, я хотел бы использовать аннотации данных из файла метаданных.

Кроме того, я не отправляю обратно всю информацию модель для контроллера, поэтому я не могу использовать функцию Model.ISValid.

Это мои метаданные:

[MetadataTypeAttribute(typeof(ApartmentBlock.ApartmentBlockMetaData))]
public partial class ApartmentBlock
{
    internal sealed class ApartmentBlockMetaData
    {
        [Required]
        [DisplayName("Adresse")]
        public string Address { get; set; }


        [Required]
        public int District { get; set; }


        [Required]
        public string BuildingID { get; set; }




    }
}

Это мой взгляд

            @Html.EditorFor(model => model.ApartmentBlock.BuildingID, new { htmlAttributes = new { @class = "form-control", id = "editedBuildingID" } })
            @Html.ValidationMessageFor(model => model.ApartmentBlock.BuildingID, "", new { @class = "text-danger" })



            @Html.EditorFor(model => model.ApartmentBlock.Address, new { htmlAttributes = new { @class = "form-control", id = "editedAddress" } })
            @Html.ValidationMessageFor(model => model.ApartmentBlock.Address, "", new { @class = "text-danger" })



            @Html.EditorFor(model => model.ApartmentBlock.District, new { htmlAttributes = new { @class = "form-control", id = "editedDistrict" } })
            @Html.ValidationMessageFor(model => model.ApartmentBlock.District, "", new { @class = "text-danger" })

Это мой ajax метод записи:

$ (документ) .on ('click', '.btn.btn - primary.saveEditBuilding', function (e) {

                 $("#buildingForm").validate();

                 if ($("#buildingForm").valid()) {



                     var editedAdddress = $('#editedAddress').val();
                     var editedBuildingID = $('#editedBuildingID').val();
                     var editedDistrict = $('#editedDistrict').val();

                     $.post("/Buildings/DetailsForEdit",
                         AddAntiForgeryToken({

                             address: editedAdddress,
                             buildingID: editedBuildingID,
                             district: editedDistrict,
                             id: '@Model.ApartmentBlock.ApartmentBlockID'
                         })).done
                         (
                             function (data, status) {

                                 if (data.success == true) {
                                     $('#subtitleBuildingHeader').html(data.header);
                                        $('#addressuild').html(data.buidlingdeta);


                                     $('#myModal').modal('hide');



                                 }
                                 else {

                                     //show jquery validation messages
                                 }



                             }).fail(function () {

                                 //show jquery validation message




                             });


           }
return false;
             });

Это мой метод контроллера:

[HttpPost] [ValidateAntiForgeryToken ()]

    public ActionResult DetailsForEdit(string address, string buildingID, string district, string id)
    {
        //int apartBlockID = Convert.ToInt32(id);
          var modelView= buildRepo.EditApart(address, buildingID, district, id);



        //checking if model is valid or is there better way?

        if (modelView.ApartmentBlock.District.HasValue )
        {

            //if model valid then update view

           //(code removed....)

            return Json(new { header, buidlingdeta, success=true });



        }
        else
        {
             //return jquery validation messages from data annotations?

        }



    }
...