У меня есть таблица, собственно вод код
CREATE TABLE [dbo].[QuestionBlocks] (
[Block_ID] INT IDENTITY (1, 1) NOT NULL,
[Question1] NVARCHAR (MAX) NULL,
[Question2] NVARCHAR (MAX) NULL,
[Question3] NVARCHAR (MAX) NULL,
[Question4] NVARCHAR (MAX) NULL,
[Question5] NVARCHAR (MAX) NULL,
[Question6] NVARCHAR (MAX) NULL,
[Question7] NVARCHAR (MAX) NULL,
[Question8] NVARCHAR (MAX) NULL,
[Question9] NVARCHAR (MAX) NULL,
[Question10] NVARCHAR (MAX) NULL,
[Interview_Id] INT NULL,
[QuestionId] INT NULL,
PRIMARY KEY CLUSTERED ([Block_ID] ASC),
CONSTRAINT [FK_QuestionBlocks_ToTable] FOREIGN KEY ([Interview_Id]) REFERENCES [dbo].[Interviews] ([Interview_Id]) ON DELETE CASCADE
);
Есть вьюха, где мне нужно светить вопросы эти в диве.
Я написал код для одного вопроса (Question1).
То есть какая логика.
Есть PartialView, вот код
@model IEnumerable<SmartSolutions.Models.QuestionBlock>
@foreach (var item in Model) {
<div class="qustion-div-one">
@Html.DisplayFor(modelItem => item.Question1)
</div>
}
Код для контроллера
public ActionResult Recording(int id)
{
/*var items = db.QuestionBlocks
.Where(x => x.Interview_Id == id)
.Select(x => x).ToList();*/
ApplicationDbContext db = new ApplicationDbContext();
return View();
}
public ActionResult QuestionBlock(int id) {
ApplicationDbContext db = new ApplicationDbContext();
var questionblocks = db.QuestionBlocks.Take(id);
return PartialView(questionblocks);
}
И собственно код AJAX запроса
<script>
$(document).ready(function () {
var full_url = document.URL; // Get current url
var url_array = full_url.split('/') // Split the string into an array with / as separator
var id = url_array[url_array.length - 1]; // Get the last part of the array (-1)
alert(id);
$.ajax({
type: "GET",
url: "/interwier/QuestionBlock",
data: { id: id },
success: function (data) {
$("#questions").html(data);
},
error: function () {
alert("Smth wrong in controller");
}
});
});
</script>
В чем моя проблема, по кнопке надо грузить в этот PartialView Question 2 и т.д
Как это реализовать? Спасибо!
Для того, чтобы рисовать на Вашей PartialView
все ваши вопросы из таблицы QuestionBlocks
нужно немного переписать код. Метод контроллера, который рисует основную страницу переписать так, чтобы в нее передавать подготовленный список.
Ваша основная загвоздка в том, что таблица в базе данных спроектирована некорректно. Внутри таблицы QuestionBlocks
у Вас есть Question1
, Question2
, Question3
, Question4
, Question5
, Question6
, Question7
, Question8
, Question9
, Question10
- все они столбцы таблицы. Было бы неплохо нормализовать таблицу и вынести Question
в отдельную таблицу, чтобы у объекта QuestionBlock
был список Question
.
Но Ваш код можно переписать так, чтобы продемонстрировать как должно быть по-хорошему (но выглядит он ужасно) но без AJAX запроса. Метод контроллера, который рисует основную страницу перепишем так:
public ActionResult Recording(int id)
{
List<string> lst = new List<string>();
ApplicationDbContext db = new ApplicationDbContext();
var item = db.QuestionBlocks.FirstOrDefault(x => x.Interview_Id == id);
if(item != null)
{
lst.Add(item.Question1);
lst.Add(item.Question2);
lst.Add(item.Question3);
lst.Add(item.Question4);
lst.Add(item.Question5);
lst.Add(item.Question6);
lst.Add(item.Question7);
lst.Add(item.Question8);
lst.Add(item.Question9);
lst.Add(item.Question10);
}
return View(lst);
}
Таким образом на Вашей основной странице будет не пустая модель:
@model List<string>
Список этих вопросов будем передавать на PartialView
в Вашей основной странице как-то так:
@Html.Partial(/*Ваша PartialView*/, Model)
Теперь перейдем далее, к Вашей PartialView
, на ней у Вас уже есть модель, тут изменения тоже будут, хотите рисовать в одном блоке - вынесите его за пределы цикла foreach
. Итак, что будет на странице:
@model List<string>
<div class="qustion-div-one">
@foreach (var item in Model) {
@Html.DisplayFor(modelItem => item)
}
</div>
В этом случае все будет рисоваться сразу после загрузки страницы.
Второй вариант (менее затратный). Просто перепишем Вашу PartialView
вот так, чтобы при клике на кнопку у Вас отобразились все Questions
:
@model IEnumerable<SmartSolutions.Models.QuestionBlock>
@foreach (var item in Model) {
<div class="qustion-div-one">
@Html.DisplayFor(modelItem => item.Question1)
@Html.DisplayFor(modelItem => item.Question2)
@Html.DisplayFor(modelItem => item.Question3)
@Html.DisplayFor(modelItem => item.Question4)
@Html.DisplayFor(modelItem => item.Question5)
@Html.DisplayFor(modelItem => item.Question6)
@Html.DisplayFor(modelItem => item.Question7)
@Html.DisplayFor(modelItem => item.Question8)
@Html.DisplayFor(modelItem => item.Question9)
@Html.DisplayFor(modelItem => item.Question10)
</div>
}
Для того, чтобы рисовать каждый новый Question
при клике на кнопку - нужно менять концепцию модели данных. Текущая модель не подходит, придется много писать некрасивого кода. Если будет список однотипных значений - то будет проще. На данном этапе завершаю ответ, так как логика для отображения новых значений при клике пока такая: внутрь обработчика вешать проверку на то, какой блок был нарисован (к примеру храним идентификатор в переменной) и в зависимости от этого переходить к рисованию следующего, причем это будет происходить динамически в JavaScript
.
К примеру если будет массив строк в качестве модели на основной странице, то будет следующее:
Объявим переменную на странице:
@{
var indexQuestion = 0; // в начале первый элемент
}
А в JavaScript
будет обработчик нажатия кнопки:
$(document).ready(function () {
// предположим что у нее идентификатор btn
$('#btn').click(function () {
if(@indexQuestion < 10) // знаем, что элементов десять
{
var input = document.createElement('input');
input.type = "text";
// берем значение и делаем инкремент
input.value = '@Model[indexQuestion++]';
// в блок questions добавим новый элемент
document.getElementbyId('questions').appendChild(input);
}
}
}
В таком случае PartialView
уже не будет нужна для рисования и тут снова без AJAX. Просто в Вашем вопросе достаточно странная логика, которая до конца не продумана, даже если продумана, то необходимые данные и код для этого не подготовлены.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В сети нашел интересную реализацию хеширование с использованием класса sha1Все что нужно для шифрования и дешифрования, так это вот этот метод
Нужно записать данные в таблицу ексельДелаю вот так:
Хочу отправить запрос, на создание поста в группе вк, вчера буквально работал, сейчас выдает 400 bad requestСамое главное, что если вывожу переменную...