(Html.DropdownList)值不能为null。参数名称:items

时间:2017-07-18 07:30:16

标签: c# asp.net-mvc-5

我有一个包含2个部分视图_LoginPartial_RegisterPartial的登录视图页面。在_RegisterPartial中,我有包含角色的下拉列表。

 @Html.DropDownListFor(m => m.CompanyProfile, new SelectList(ViewBag.CompanyProfiles, "AccountId", "AccountName"), "Select", new { @class = "form-control" })

我在GET方法中将此下拉列表初始化为

 //
    // GET: /Account/Login
    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.CompanyProfiles = util.GetCompanyProfiles();
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

我从数据库中获取列表的代码是

 public List<abo_AccountType> GetCompanyProfiles()
    {
        List<abo_AccountType> companyProfiles = new List<abo_AccountType>();
        companyProfiles = db.GetAccountTypes().ToList();
        return companyProfiles;
    }

当我们打开登录页面时,列表被初始化,我知道我需要在POST方法中再次初始化下拉列表,所以我就像在GET方法中那样做了

    //
    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterViewModel model)
    {
        ViewBag.CompanyProfiles = util.GetCompanyProfiles();

        if (ModelState.IsValid)
        {
            ViewBag.CompanyProfiles = util.GetCompanyProfiles();
            string[] errors = util.CheckDuplicateAccount(model);
            if (errors == null)
            {
                long currentUser = Convert.ToInt64(System.Web.HttpContext.Current.User.Identity.GetUserId());
                util.CreateNewAccount(model, currentUser);
            }

            else
            {
                AddErrors(errors);
            }
        }

        return RedirectToAction("Login");
    }

即使我再次初始化下拉列表,我仍然会收到Value cannot be null. Parameter name: items的错误。 我已经搜索了几乎所有的答案,并且他们都说我需要再次初始化下拉菜单,我正在做,所以为什么我仍然会收到此错误。

2 个答案:

答案 0 :(得分:0)

你应该生成&#34; GET&#34;注册的方法和在那里设置CompanyProfiles。

[HttpGet]
[AllowAnonymous]
public ActionResult Register()
{
    ViewBag.CompanyProfiles = util.GetCompanyProfiles();
    return View();
}

答案 1 :(得分:0)

创建另一个具有两个模型属性的模型,并在后期操作中传递它。

[HttpGet]
[AllowAnonymous]
public ActionResult Register(combinedModel model)
{
    ViewBag.CompanyProfiles = util.GetCompanyProfiles();
    return View(model);
}