MVC: Как получить данные из моей базы данных, чтобы показать данные в выпадающем списке с помощью viewmodel? - PullRequest
0 голосов
/ 19 февраля 2012

Это моя 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 ]

0 голосов
/ 14 марта 2012
   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>
0 голосов
/ 20 февраля 2012

Вы не передаете список, который будет заполнять раскрывающийся список, см. Пример ниже

@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

Надеюсь, это поможет.

...