MVC Dropdownlist使Object引用未设置为对象错误的实例

时间:2016-03-01 09:50:05

标签: asp.net-mvc drop-down-menu

我在SO上遇到了所有其他类似问题,但我无法理解如何为我的案例或哪个解决方案实施解决方案。这是我在MVC的第二天,我遇到的事情可能非常简单。

我要做的是,检查条件并返回注册页面,如果满足条件则发出警告。当它发生时,dropdownlist给出了名义错误。

在触发SP之前检查条件。有问题的是CompanyExists。

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Register(RegisterViewModel model, FormCollection coll)
        {
            bool UserExists = CompanyDB.User_Check_Exists(model.Email);
            bool CompanyExists = CompanyDB.Company_Check_Exists(model.CountryCode, model.TaxIdNo);

            if (!ModelState.IsValid)
            {
                return View(model);
            }

            if (CompanyExists)
            {
                ViewBag.CompanyExists = CompanyExists;

                return View(model);
            }

            if (coll["chkContract"] != "on")
            {
                ViewBag.ContractError = true;
                return View(model);
            }

            ViewBag.UserExists = UserExists;

            if (UserExists)
            {
                string UserEmail = model.Email;
                ViewBag.UserEmail = model.Email;
            }
            string error = String.Empty;
            RegistrationDB.Registration_Add(model, out error);
            return View("RegisterComplete");
        }

下拉人口:

public class MVCUtility
    {
        public static ClaimsIdentity CurrentClaimsIdentity{
            get { return null; }    
        }

        public static List<SelectListItem> DataTableToListItem(DataTable Table, string ValueField, string TextField) {
            List<SelectListItem> items = new List<SelectListItem>();

            foreach (DataRow dr in Table.Rows) {
                SelectListItem item = new SelectListItem() {  Value = dr[ValueField].ToString(),  Text = dr[TextField].ToString() };
                items.Add(item);
            }
            return items;
            //SelectList list = new SelectList(items);
            //return list;
        }
    }

和register.cshtml的下拉行

 @Html.Bootstrap().DropDownListFor(t => t.CountryCode, MVCUtility.DataTableToListItem((DataTable)ViewBag.CountryList, "Code", "Name")).HtmlAttributes(new { @style = "width:100%;" })

我从其他问题中理解的是,我需要通过在return(View);行之前向其发送数据来重新填充下拉列表。我不知道如何用这些参数来管理它。

1 个答案:

答案 0 :(得分:1)

ViewBag.CountryList为空。

在控制器中 没有选定的值

ViewBag.CountryList = new MultiSelectList("Bind Your Country List", "Code", "Name");

具有选定值

ViewBag.CountryList = new MultiSelectList("Bind Your Country List", "Code", "Name","Selected Code");

在cshtml页面

 @Html.DropDownList("CountryCode", (MultiSelectList)ViewBag.CountryList, new { id = "CountryCode" })