ASP.net Страницы Razor ядра MVC и Ajax jQuery

#jquery #asp.net-mvc #asp.net-ajax #asp.net-core-2.1 #razor-pages

#jquery #asp.net-mvc #asp.net-ajax #asp.net-core-2.1 #страницы razor

Вопрос:

Большое вам спасибо за вашу помощь. Я получил задание из the work, и прошло две недели с тех пор, как я застрял. Мы высоко ценим вашу помощь и советы. Я использую ASP.NET ядро 2.1 и EnitityFramework. Я получаю эту ошибку «: HTTP404: НЕ НАЙДЕНО — сервер не нашел ничего, соответствующего запрошенному URI (унифицированному идентификатору ресурса). (XHR)ПОСТ-https://localhost:44336/EducationPage?handler=Add» Я пытаюсь уже две недели. Спасибо за вашу помощь. У меня есть единственная страница Razor под названием EducationPage. Внутри этой страницы я заполняю свои данные. На той же странице я хочу разрешить пользователю создавать новый объект Education, нажав на кнопку Create, которая откроет форму. Пользователь вводит данные, и как только он нажимает кнопку добавить, запускается мой ajax-код. Вот моя форма

 <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">×</button>
            </div>
            <div class="modal-body">
                <form id="myForm" method="post">
                    @Html.AntiForgeryToken()
                    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                    <input type="hidden" asp-for="obj.EducationDetailId" id="eduId" />
                    <input type="hidden" asp-for="obj.UserId" id="userId" />
                    <div class="form-group">
                        <label asp-for="obj.InstituteName" class="control-label"></label>
                        <input asp-for="obj.InstituteName" id="instName" class="form-control" />
                        <span asp-validation-for="obj.InstituteName" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="obj.CertificateName" class="control-label"></label>
                        <input asp-for="obj.CertificateName" id="certName" class="form-control" />
                        <span asp-validation-for="obj.CertificateName" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="obj.Major" class="control-label"></label>
                        <input asp-for="obj.Major" id="major" class="form-control" />
                        <span asp-validation-for="obj.Major" class="text-danger"></span>
                    </div>

                    <div class="form-group">
                        <label asp-for="obj.startDate" class="control-label"></label>
                        <input type="text" id="startDate" asp-format="{0:MM/dd/yyyy}" asp-for="obj.startDate" class="form-control" />
                        <span asp-validation-for="obj.startDate" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="obj.EndDate" class="control-label"></label>
                        <input type="text" id="endDate" asp-format="{0:MM/dd/yyyy}" asp-for="obj.startDate" class="form-control" />
                        <span asp-validation-for="obj.EndDate" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="obj.Grade" class="control-label"></label>
                        <input asp-for="obj.Grade" id="grade" class="form-control" />
                        <span asp-validation-for="obj.Grade" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="obj.EduDescrp" class="control-label"></label>
                        <textarea asp-for="obj.EduDescrp" id="descp" class="form-control"></textarea>
                        <span asp-validation-for="obj.EduDescrp" class="text-danger"></span>
                    </div>
                    @*<div class="form-group">
                            <label asp-for="obj.UserId" class="control-label"></label>
                            <select asp-for="obj.UserId" class ="form-control" asp-items="ViewBag.UserId" hidden></select>
                        </div>*@
                    @*<div class="form-group">
                            <input type="submit" value="Create" class="btn btn-primary" />
                        </div>*@
                </form>
                <div id="msg"></div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-primary" id="btnAdd">Add</button>
                <button type="button" class="btn btn-primary" id="btnUpdate" style="display:none;" onclick="Update();">Update</button>
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>
  

Мой Ajax-код выглядит так :

 <script>
        $("#btnAdd").click(function () {
            var options = {};
            options.url = "/EducationPage?handler=Add";
            options.type = "POST";

            var obj = {};
            obj.eduId = $("#eduId");
            obj.userId = $("#userId");
            obj.instName = $("#instName").val();
            obj.certName = $("#certName").val();
            obj.major = $("#major").val();
            obj.startDate = $("#startDate").val();
            obj.endtDate = $("#endDate").val();
            obj.descrp = $("#descp").val();
            console.log(obj);
            options.data = JSON.stringify(obj);
            options.data = $("#myForm").serialize;
            //console.log(options.data)
            options.contentType = "application/json; charset=utf-8";
            options.dataType = "json";
            options.beforeSend = function (xhr) {
            xhr.setRequestHeader("MY-XSRF-TOKEN",
            $('input:hidden[name="__RequestVerificationToken"]').val());
            };
            options.success = function (msg) {
                $("#msg").html(msg);
            };
            options.error = function () {
                $("#msg").html("Error while making Ajax call!");
            };
            console.log(options);
            $.ajax(options);
        });
    </script>
  

Мой серверный код — это

    [HttpPost]
        public async Task<IActionResult> OnPostAdd([FromBody] Obj obj)
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }
            var UserInDB = await _userManager.GetUserAsync(HttpContext.User);
            obj.UId = UserInDB.Id;
            _db.Obj.Add(obj);
            await _db.SaveChangesAsync();
            return new JsonResult("Customer Added Successfully!");
        }



    The error message I am getting is this :
HTTP404: NOT FOUND - The server has not found anything matching the       requested URI (Uniform Resource Identifier).
    "(XHR)POST - https://localhost:44336/EducationPage?handler=Add"
  

Комментарии:

1. options.data = JSON.stringify(obj); в этой строке вы пробовали присваивать данным только переменную obj? вот так : options.data = obj;

2. Это сообщение об ошибке http не связано со страницей razor. Является ли EducationPage вашим контроллером или действием? Ваше действие находится в процессе отправки. Но ваш URL похож на / EducationPage… Вы уверены, что это правильно. Я спрашиваю, потому что я не знаю структуру вашего проекта. Если EducationPage является вашим контроллером, попробуйте изменить URL-адрес следующим образом /EducationPage/OnPostAdd…

Ответ №1:

Сейчас это работает, моя ошибка, я сразу выделил место внутри своих сервисов.Добавить дополнительные настройки (опция => option.HeaderName = «MY-XSRF-TOKEN»); который я удалил, и он работает. Так что ничего плохого в приведенном выше коде нет