#html #asp.net-core
#HTML #asp.net-ядро
Вопрос:
У меня есть класс, который включает в себя один словарь<int,string> . int — это клавиша переключателя, а value — заголовок выбора. Я пытаюсь получить список словарей в контроллере, включающий ключи и значения переключателей. когда я запускаю программу, список равен 0. Я думаю, что что-то не так с названием переключателей и вводом заголовка выбора, но я не знаю, что мне написать.
public class ChoiceQuestion
{
public int QuestionId { get; set; }
public Dictionary<int, string> Choice { get; set; }
public int Answer { get; set; }
}
в контроллере у меня есть это:
public IActionResult CreateQuestion(int courseId, List<ChoiceQuestion> choices,
QuestionType type, Question question)
{
_questionService.AddQuestion(courseId, type, choices, question);
return RedirectToAction("Index");
}
и это мое мнение:
<div class="form-group choiceDiv" style="display: none;" id="choiceDiv">
<a id="plus"><i class="glyphicon glyphicon-plus"></i></a>
<input type="radio" name="choices.choice[0].key" value="1" />
<input type="text" placeholder="گزینه " name="choices.choice[0].value" />
<input type="radio" name="choices.choice[1].key" value="1" />
<input type="text" placeholder="گزینه " name="choices.choice[1].value" />
<span asp-validation-for="Choice" class="text-danger"></span>
</div>
Ответ №1:
Во-первых, вы хотите передать данные List<ChoiceQuestion> choices
, поэтому ваше имя ввода должно быть choices[xxx].choice[xxx]
.
И затем вы можете изменить имя ввода типа текста перед отправкой формы, чтобы значение ввода типа текста было привязано к dictionary of List<ChoiceQuestion> choices
. Вот рабочая демонстрация:
<form method="post" id="myform">
<div class="form-group choiceDiv" style="display: none;" id="choiceDiv">
<a id="plus"><i class="glyphicon glyphicon-plus"></i></a>
<input type="radio" name="choices[0].choice[0].key" value="1" />
<input type="text" placeholder="گزینه " name="choices[0].choice[key]" value="choicetitle1" />
<input type="radio" name="choices[0].choice[1].key" value="2" />
<input type="text" placeholder="گزینه " name="choices[0].choice[key]" value="choicetitle2" />
<span asp-validation-for="Choice" class="text-danger"></span>
</div>
<input type="submit" value="submit" />
</form>
<script>
$('#myform').submit(function () {
var keys = [];
var count = 0;
$("#choiceDiv input[type='radio']").each(function () {
keys.push($(this).val());
});
$("#choiceDiv input[type='text']").each(function () {
$(this).attr("name", $(this).attr("name").replace("key", keys[count]));
count ;
});
});
</script>
Я меняю имена ввода текстового типа на choices[0].choice[key]
, и перед отправкой формы я заменяю «ключ» в имени на значение переключателя.И затем форма опубликует данные словаря.
Или вы можете удалить переключатели и использовать представление следующим образом:
<div class="form-group choiceDiv" style="display: none;" id="choiceDiv">
<a id="plus"><i class="glyphicon glyphicon-plus"></i></a>
<input type="text" placeholder="گزینه " name="choices[0].choice[1]" value="choicetitle1"/>
<input type="text" placeholder="گزینه " name="choices[0].choice[2]" value="choicetitle2"/>
<span asp-validation-for="Choice" class="text-danger"></span>
</div>
И тогда вы получите ключ = 1, значение = «choicetitle1»; ключ = 2, значение = «choicetitle2» в словаре.