C# 值不能为null。参数名称:DropDownListFor上的项目
我正在尝试使用DropDownListFor返回一个模型的电子邮件列表。我在这个问题上找到了一些话题,所以这似乎很常见,我认为这个列表需要重新填充,但我找不到一种有效的方法(或者我理解的方法与其他示例相比) 无论我做什么,我总是得到空错误。我在想,也许它一开始并没有返回任何电子邮件,但我不理解dropdownlist与模型的工作方式 是否有其他问题导致当前无法看到的空值 我在类中定义列表:C# 值不能为null。参数名称:DropDownListFor上的项目,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试使用DropDownListFor返回一个模型的电子邮件列表。我在这个问题上找到了一些话题,所以这似乎很常见,我认为这个列表需要重新填充,但我找不到一种有效的方法(或者我理解的方法与其他示例相比) 无论我做什么,我总是得到空错误。我在想,也许它一开始并没有返回任何电子邮件,但我不理解dropdownlist与模型的工作方式 是否有其他问题导致当前无法看到的空值 我在类中定义列表: public class User { [Required] [Display(Name
public class User {
[Required]
[Display(Name = "Email Address")]
public string Email { get; set; }
public IEnumerable<SelectListItem> EmailList { get; set; }
}
视图:
作为SelectListItem尝试此操作:
IList<SelectListItem> lst = new List<SelectListItem>();
lst.Add(new SelectListItem()
{
Value = "Hello",
Text = "World"
});
ViewBag.DropDownList = lst;
另一个选择是:
IList<SelectListItem> lst = new List<SelectListItem>();
lst.Add(new SelectListItem()
{
Value = "Email",
Text = "Email"
});
ViewBag.DropDownList = new SelectList(p.EmailList, "Value", "Text");
作为SelectListItem尝试此操作:
IList<SelectListItem> lst = new List<SelectListItem>();
lst.Add(new SelectListItem()
{
Value = "Hello",
Text = "World"
});
ViewBag.DropDownList = lst;
另一个选择是:
IList<SelectListItem> lst = new List<SelectListItem>();
lst.Add(new SelectListItem()
{
Value = "Email",
Text = "Email"
});
ViewBag.DropDownList = new SelectList(p.EmailList, "Value", "Text");
尝试在razor视图中的选择列表中传递“ViewBag.DropDownList”,而不是模型。EmailList@Nirman事实上,我把它放在了里面,并把它改成了
newselectlist
。。。试错真的。编辑主要帖子以在razor中添加ViewBag。因为u.EmailList
是null
(您没有初始化它,更不用说用任何项目填充它了)@Stephen Muecke我如何用项目填充它?一直在尝试将下面的答案(lst
)包装在foreach中,并在user.EmailList中执行SelectListItem项,但没有成功。我觉得我不明白什么。但是你所做的就是var u=new User()
只初始化一个新的用户
,该用户没有任何项目。您甚至不需要ViewBag.DropDownList=…
该模型已经包含一个属性IEnumerable EmailList
,因此在视图中它只是@Html.DropDownListFor(model=>model.Email,model.EmailList),“---选择一个值----”,新建{…}
(除了您必须首先初始化电子邮件列表
,使其不为空
)尝试传递“ViewBag.DropDownList”在razor视图中的SelectList中,而不是模型。EmailList@Nirman实际上,我把它改成了new SelectList
…真的是试错了。编辑了主要帖子,在razor中添加了ViewBag。因为u.EmailList
是null
(你没有初始化它,更不用说用任何项目填充它了)@Stephen Muecke我如何用项目填充它?我一直在尝试将下面的答案(lst
)封装在foreach中,并在user.EmailList
中执行SelectListItem项目,但没有用。我觉得我不明白一些事情。但您所做的只是var u=new user()
只初始化一个新的用户
,该用户不会有任何项目。而且您甚至不需要ViewBag.DropDownList=…
该模型已经包含一个属性IEnumerable EmailList
,因此在视图中它的just@Html.DropDownListFor(model=>model.Email,model.EmailList,“---选择一个值----”,new{…})
(除非您必须首先初始化电子邮件列表
,使其不为空
)第一个解决方案只返回一个记录World
,而它应该返回一个电子邮件列表。我是否错过了应该查找/查询它们的部分?我认为该模型能够自动解决它。当然,这只是我的示例,您需要用所需的记录填充它。我只是告诉您如何使用它应该可以工作并防止错误。第一个解决方案只返回一条记录,而它应该返回一个电子邮件列表。我是否错过了应该查找/查询它们的部分?我认为该模型能够自动解决它。当然,这只是我的示例,您需要用所需的记录填充它。I j我们必须向您介绍它应该如何工作,并防止出现错误。
var u = new User();
ViewBag.DropDownList = u.EmailList //You need to populate your EmailList first before you declare it here.
return View(u);
IList<SelectListItem> lst = new List<SelectListItem>();
lst.Add(new SelectListItem()
{
Value = "Email",
Text = "Email"
});
ViewBag.DropDownList = new SelectList(p.EmailList, "Value", "Text");
@Html.DropDownListFor(model => model.Email, (SelectList)ViewBag.DropDownList, "---Select a value---", new { htmlAttributes = new { @class = "form-control" } })