【问题标题】:MVC: How to get data from my database to show the data in a dropdownlist with viewmodel?MVC:如何从我的数据库中获取数据以使用 viewmodel 在下拉列表中显示数据?
【发布时间】:2023-03-03 12:28:01
【问题描述】:

这是我的视图模型

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 个参数”

解决办法是什么?

谢谢!

【问题讨论】:

    标签: model-view-controller drop-down-menu viewmodel


    【解决方案1】:
       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>
    

    【讨论】:

      【解决方案2】:

      您没有传入将填充下拉列表的列表,请参阅下面的示例

      @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

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多