MVC: Как получить данные из моей базы данных, чтобы показать данные в выпадающем списке с помощью viewmodel?
Это моя Viewmodel
public class IndexViewModel
{
public string QuestionText { get; set; }
public string Sname { get; set; }
public string Cname { get; set; }
public int CID { get; set; }
public int SID { get; set; }
public Question question { get; set; }
public CoreValue corevalue { get; set; }
public SubjectType subjecttype { get; set; }
}
и, на мой взгляд, у меня есть проблемы, этот код не работает:
@model NKI3.ViewModels.IndexViewModel
@using (Html.BeginForm()) {
<fieldset>
<div class="editor-label">
@Html.DropDownListFor(model => model.Sname)
</div>
</fieldset>
}
Я получаю сообщение об ошибке "Нет перегрузки для метода" DropDownListFor принимает 1 аргумент "
Какое решение?
Спасибо!
2 ответа
Решение
public class AdminController : Controller
{
AdminRepository AdminRep = new AdminRepository();
public ActionResult Index()
{
List<Question> ListQuestions = AdminRep.GetAllQuestions();
var model = new AdminIndexViewModel();
model.QuestionList = new List<QuestionViewModel>();
foreach (var item in ListQuestions)
{
var QuestionViewModel = new QuestionViewModel();
model.QuestionList.Add(QuestionViewModel);
QuestionViewModel.QuestionText = item.QuestionText;
QuestionViewModel.QuestionId = item.Id;
QuestionViewModel.CoreValues = new List<string>();
foreach (var CoreValues in item.CoreValue)
{
QuestionViewModel.CoreValues.Add(CoreValues.Name);
}
QuestionViewModel.SubjectTypes = new List<string>();
foreach (var SubjectType in item.SubjectType)
{
QuestionViewModel.SubjectTypes.Add(SubjectType.Name);
}
}
return View(model);
}
Посмотреть:
@foreach (var item in Model.QuestionList) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.QuestionText)
</td>
<td>
@string.Join(", ", item.SubjectTypes)
</td>
<td>
@string.Join(", ", item.CoreValues)
</td>
<td>
@Html.ActionLink("Edit", new { id = item.QuestionId}) |
@Html.ActionLink("Delete", new { id = item.QuestionId })
</td>
</tr>
Вы не переходите в список, который будет заполнять раскрывающийся список, см. Пример ниже
@Html.DropDownListFor(model => model.Sname, ((IEnumerable<SNameList>)ViewBag.ListofSName).Select(option => new SelectListItem
{
Text = (option == null ? "None" : option.Description),
Value = option.Id.ToString(),
Selected = (Model != null) && (option.Id == Model.SName)
}), "Choose...", new { @class = "full-width" })
В этом примере я бы заполнил ViewBag.ListofSName в контроллере списком, которым я хочу заполнить выпадающий список. Будьте осторожны, проблема заключается в том, что если у вас есть какая-либо проверка в обратной передаче, и она терпит неудачу, вам необходимо повторно заполнить ViewBag
Надеюсь, это поможет.