Я знаю, что могу установить SelectedItem в моем контроллере, но я не могу понять, как установить его в моем представлении. Я работаю над своего рода приложением с помощью карточки (учебное пособие) и импортировала около 400 тестовых вопросов. Теперь я хочу написать страницу для инструктора, чтобы иметь возможность выбрать «категорию» для каждого вопроса. Я бы хотел, чтобы они могли обновлять категорию по всем вопросам на одной странице. В моей модели есть объект с вопросом, который содержит поле внешнего ключа для объекта категории (поле называется QuestionCategory). Итак, мое представление основано на объекте «Вопрос», но я отправляю список категорий (их 14) в ViewBag (поэтому мне не нужно отправлять полный список SelectList с каждым из 400 вопросов. мое представление перебирает элементы моего представления, я просто хочу добавить список SelectList, содержащий 14 категорий в моем ViewBag, а затем установить SelectedItem на основе значения item.QuestionCategory. Я не могу заставить его работать.
Вот мое действие контроллера:
public ActionResult Index()
{
var context = new HBModel.HBEntities();
var query = from q in context.tblQuestions.Include("tblCategory") select q;
var questions = query.ToList();
ViewBag.Categories = new SelectList(context.tblCategories, "CategoryID", "CategoryName");
return View(questions);
}
Вот некоторые вещи, которые я пробовал в представлении (с соответствующими сообщениями об ошибках в комментариях)
@model IEnumerable<HBModel.tblQuestion>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
Question
</th>
<th>
Answer
</th>
<th>
AnswerSource
</th>
<th>
Category
</th>
<th>
Action
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@item.Question
</td>
<td>
@item.Answer
</td>
<td>
@item.AnswerSource
</td>
<td>
@item.tblCategory.CategoryName
@*This one works, but cannot initialize the selected item to be current database value*@
@Html.DropDownList("Categories")
@*compile error - CS0200: Property or indexer 'System.Web.Mvc.SelectList.SelectedValue' cannot be assigned to -- it is read only*@
@*@Html.DropDownListFor(m => item.QuestionCategory, (ViewBag.Categories as SelectList).SelectedValue = item.QuestionCategory)*@
@*error {"DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a property with the name 'CategoryId'."}*@
@Html.DropDownListFor(m => item.QuestionCategory, new SelectList(ViewBag.Categories, "CategoryId", "CategoryName"))
@*error - {"DataBinding: 'System.Char' does not contain a property with the name 'CategoryId'."}*@
@Html.DropDownListFor(m => item.QuestionCategory, new SelectList("Categories", "CategoryId", "CategoryName"))
)
</td>
<td style="width: 100px">
@Html.ActionLink("Edit", "Edit", new { id = item.QuestionID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.QuestionID })
</td>
</tr>
}
</table>
Конечно, если я смогу заставить это работать, мне нужно попытаться добавить действие, чтобы вернуться к контроллеру и обновить все записи, но я просто буду рад решить мою текущую проблему.
Буду очень признателен за любую помощь в этом - Спасибо!