【问题标题】:DropdownlistFor is returning a null value, how to fix it?DropdownlistFor 正在返回一个空值,如何解决?
【发布时间】:2020-12-25 15:45:24
【问题描述】:

我需要一些帮助,在我看来,我正在返回一个空值。我想得到的是创建 dropdownlistFor 时的值列表。问题是我该如何解决这样的错误?以下是我的逻辑,需要一些关于如何组队的帮助。

    // Model
      // This is for course-list.
  

       // This is for course-list.
        public class eNtsaDashboardViewModel
        {
            public string CourseName { get; set; }
    
            public List<eNtsaDashboardViewModel> CourseLicence { get; set; }
    
            public string Text { get; set; }
            public string Value { get; set; }
    
        }
    
// Mutliple Model
  public class RegCoursesViewModel
    {
        public eNtsaCourses Courses { get; set; }
        public eNtsaDashboardViewModel Dashboard { get; set; }
        public List<eNtsaDashboardViewModel> lsteNtsaDashboard { get; set; }
        public RegCoursesViewModel MainModel { get; set; }

    }
    //  View
                         @using (Html.BeginForm("SuperAdmin", "Home", FormMethod.Post))
                                            {
                                            <div class="form-group row">
                                                <label for="Content-Licence" class="col-sm-3 col-form-label">Content Licence</label>
                                                <div class="col-sm-5">
                                                @Html.DropDownListFor(model => model.Dashboard.CourseLicence, new SelectList(Model.lsteNtsaDashboard)) **// Return a null object.**
                                                </div>
                                            </div>
                                            }
    public ActionResult SuperAdmin() { 
    
    var list = new List<string>() { "Private(Copyrighted)", "Public Domain", "Creative Commons Licences", "CC Attribution", "CC Attribution Share ALike", "CC Attribution Non-Commercial", 
                    "CC Attribution Non-Commercial Share Alike", "CC Attribution Non Directive", "CC Attribution Non-Commercial No Directives" };
                ViewBag.list = list;
    return View();
    }

【问题讨论】:

  • 你永远不会返回一个模型 - return View(); 返回一个空视图。您已将选项列表放入 ViewBag,但随后尝试从模型中读取它。确保您了解模型和视图袋之间的区别。
  • @Adyson 给定的逻辑我到底缺少什么?
  • 你已经写了new SelectList(Model.lsteNtsaDashboard),但是 1) return View(); 表明你没有返回任何类型的模型对象,所以Model 在你的视图中将是空的。并且 2) 即使您返回了一个模型,lsteNtsaDashboard 仍然是 null,因为您没有填充它。事实上,我什至不确定你的模型类中是否存在这样的属性。并且 3) 您已经创建了 list 并将其添加到 viewBag 但您没有将它用于视图中的任何内容。您希望数据从哪里来填充您的 SelectList?您目前的代码没有任何意义。

标签: c# asp.net-mvc bootstrap-4 html.dropdownlistfor


【解决方案1】:

我建议你这样做

var list = new List<string>() { "Private(Copyrighted)", "Public Domain", "Creative Commons Licences", "CC Attribution", "CC Attribution Share ALike", "CC Attribution Non-Commercial", 
            "CC Attribution Non-Commercial Share Alike", "CC Attribution Non Directive", "CC Attribution Non-Commercial No Directives" };

List<SelectListItem> select_list = new List<SelectListItem>();

var query = from li in list
    select new SelectListItem()
    {
          Value = li.ToString(),
        Text = li.ToString(),
    };
 select_list = query.ToList();
 ViewBag.list = select_list;

然后在你的view

@Html.DropDownListFor(model => model.Dashboard.CourseLicence, ViewBag.list as List<SelectListItem>)
                                        

【讨论】:

  • 谢谢老兄,对来自 li(table name) 的查询提出疑问??
  • 不,不是表名,它来自您之前创建的静态列表var list
  • 好的,我听到了,我在 ViewSide 上遇到了这个异常,为什么提出这个问题。 System.InvalidOperationException: '没有具有键'Dashboard.CourseLicence'的'IEnumerable'类型的ViewData项。'
  • 你能用包含Dashboard.CourseLicence的完整模型更新你的问题吗?
  • 如果我从视图中得到该异常。它在哪里访问 ViewData 没有密钥?试图理解那里的错误。我必须更改该模型属性吗?我确实更新了我的模型,请看一下。
【解决方案2】:

我认为你应该通过 Viewbag 概念 little mnre。 在这里,您将列表值分配给 Viewbag,而不是在视图中使用该值。 在您的情况下,我对您的代码进行了一些修改。 在您的控制器中,

public ActionResult SuperAdmin() {
      ViewBag.Message = "Your application description page.";

      List<SelectListItem> list = new List<SelectListItem>()
      {
        new SelectListItem { Text = "Private(Copyrighted)", Value = "1" },
        new SelectListItem { Text = "Public Domain", Value = "2" },
        new SelectListItem { Text = "CC Attribution Non Directive", Value = "3" },
        new SelectListItem { Text = "Creative Commons Licences", Value = "4" },

      };
      ViewBag.list = list;
      return View();
}

然后更改视图的下拉列表以接受 Viewbag.list 值。 在您看来,

@using (Html.BeginForm("SuperAdmin", "Home", FormMethod.Post))
   {
        <div class="form-group row">
        <label for="Content-Licence" class="col-sm-3 col-form-label">Content Licence</label>
        <div class="col-sm-5">
         @Html.DropDownListFor(model => model.Dashboard.CourseLicence, (IEnumerable<SelectListItem>)ViewBag.list)
         </div>
        </div>
   }

这不是制作下拉列表的首选方式,我只是修改了您的代码以使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2019-09-10
    相关资源
    最近更新 更多