#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, чтобы посмотреть, какой ответ вернул сервер.