Заполнить несколько текстовых полей из базы данных, выбрав выпадающий список ASP.NET Ядро MVC

#ajax #asp.net-core #model-view-controller

#ajax #asp.net-ядро #модель-представление-контроллер

Вопрос:

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

Сценарий Ajax

 <script>
function getUploadedFile(Sle) {
    $.ajax({
        url: "/Privacy/GetUploadfileName",
        data: { "FileID": Sle.value },
        type: "Post",
        dataType: "text",
        success: function (data) {
            console.log(data);
            $("#uploadedFile1").val(data);                
        },
        error: function (data) {
            alert(data);
        }
    });
}
  

Модель

 public class Semester
{        
    public int SemesterNo { get; set; }
    public string SemesterId { get; set; }
}
public class Course
{        
    public int CourseID { get; set; }
    public string Title { get; set; }
    public int Credits { get; set; }
    public string SemesterNumber { get; set; }
}
  

Контроллер

     public IActionResult Privacy()
    {
        ViewBag.semester = new SelectList(_context.Semester, "SemesterNo", "SemesterId");
        return View();
    }
    public IActionResult GetUploadfileName(string FileID)
    {
        //get the filename result accoding to ID
        var result = _context.Courses.Where(x => x.SemesterNumber == FileID).First();
        return Ok(result.CourseID);
    }
  

Число просмотров

 @model MVCInsertDB.Models.Course
<form method="post" asp-controller="Privacy" asp-action="Privacy" role="form">
<div class="form-group">
    <label>Semester</label>

    @Html.DropDownListFor(model => model.SemesterNumber, ViewBag.semester as SelectList, "--Select Item--", new { id = "uploadedFile", @class = "js-select u-select--v1-select w-10", @onChange = "getUploadedFile(this)" })
</div>
<br />
<label>Course Id</label>
<input id="uploadedFile2" type="text" class="form-control" />
<br />
<label>Course Name</label>
<input id="uploadedFile3" type="text" class="form-control" />
<br />
<label>Course Credit</label>
<input id="uploadedFile4" type="text" class="form-control" />
</form>
  

введите описание изображения здесь

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

1. Вы имеете в виду, что хотите показать значение всех свойств модели курса в с помощью div?

Ответ №1:

Согласно вашему описанию, я предлагаю вам попробовать напрямую вернуть jsonresult из контроллера MVC и изменить ajax для получения ответа json.

Более подробную информацию вы можете найти в приведенных ниже кодах:

AJax:

         function getUploadedFile(Sle) {
            $.ajax({
                url: "/Home/GetUploadfileName",
                data: { "FileID" : Sle.value },
                type: "Post",
                contentType: 'application/x-www-form-urlencoded',
                dataType: 'json',
                success: function (data) {
                    $("#uploadedFile2").val(data.courseID);
                    $("#uploadedFile3").val(data.title);
                    $("#uploadedFile4").val(data.credits);
                },
                error: function (data) {
                    alert(data);
                }
            });
        }
  

Контроллер:

     public JsonResult GetUploadfileName(string FileID)
    {
        //get the filename result accoding to ID
        var result = _context.Courses.Where(x => x.SemesterNumber == FileID).First();
         return Json(result);
    }
  

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

1. Спасибо за быстрый ответ. Я пробовал это, но некоторые параметры передают нулевое значение вместо выбранного элемента выпадающего списка. Не могу найти причину.

2. Что вы имеете в виду, когда какой-то параметр передает нулевое значение? Вы имеете в виду, что какой-то элемент выпадающего списка передается на серверную часть, а некоторые нет?

3. Извините. На самом деле данные: { «FileID»: Sle.value } в Ajax отправляют нулевое значение.

4. Если вы использовали { "FileID": Sle.value } , вы должны установить ContentType 'application/x-www-form-urlencoded', равным, и тогда он будет работать хорошо. Смотрите мои обновленные коды ajax.

5. Не могли бы вы поделиться информацией об ошибке? Кроме того, я предлагаю вам попробовать использовать вкладку network инструмента разработки F12, чтобы посмотреть, какой ответ вернул сервер.