代码之家  ›  专栏  ›  技术社区  ›  Carl McCallig

DropDownList选择发布为空的ASP.NET MVC

  •  0
  • Carl McCallig  · 技术社区  · 6 年前

    我有一个DropDownList,它是从一个数据库表中填充的,该表有一个名为“IncidentNumber”的列。当使用此DropDownList作为表单的一部分发布到其他数据库表中时,应用程序将引发异常,因为DropDownList选择将发布为空。如果您能帮忙,我将不胜感激!

    控制器动作

     var items = db.ViewIncidentNumbers.ToList();
            if (items != null)
            {
                ViewBag.data = items;
            }
    
            if (ModelState.IsValid)
            {
                using (LogInformationEntities4 dc = new LogInformationEntities4())
                {
                    dc.LandLostPersonDetails.Add(land);
                    dc.SaveChanges();
                }
             }
    

    视图中的代码

    <div class="form-group">
            @Html.LabelFor(model => model.Incident_Number, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("IncidentNumber", new SelectList(ViewBag.data, "IncidentNumber", "IncidentNumber"))
            </div>
        </div>
    

    编辑: 事件编号类别:

        public partial class IncidentNumber
    {
        public int Id { get; set; }
        public string IncidentNumber1 { get; set; }
    }
    

    我的控制器当前看起来像:

        [HttpGet]
        public ActionResult NewLandMissingPerson()
        {
            string teamsession = string.Empty;
            string username = string.Empty;
            teamsession = Convert.ToString(Session["Callsign"]);
            username = Convert.ToString(Session["Username"]);
    
            LogInformationEntities4 dc = new LogInformationEntities4();
            var items = dc.IncidentNumbers.ToList();
            ViewBag.data = new SelectList(items.Select(x => new { Text = x.IncidentNumber1, Id = x.Id, Value = x.IncidentNumber1 }).ToList());
    
            return View();
        }
    
            [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult NewLandMissingPerson(LandLostPersonDetail land)
        {
            LogInformationEntities4 db = new LogInformationEntities4();
            bool Status = false;
            string response = "";
    
            var items = db.IncidentNumbers.ToList();
            ViewBag.data = new SelectList(items.Select(x => new { Text=x.IncidentNumber1, Id=x.Id, Value = x.IncidentNumber1 }).ToList());
            if (ModelState.IsValid)
            {
                using (LogInformationEntities4 dc = new LogInformationEntities4())
                {
                    dc.LandLostPersonDetails.Add(land);
                    dc.SaveChanges();
                    response = "New Missing Person Log Added.";
                    Status = true;
                }
            }
    

    当前视图如下所示:

    @Html.DropDownListFor(model => model.Incident_Number, new SelectList(ViewBag.data, "IncidentNumber1", "IncidentNumber1"))
    

    我现在得到一个例外,说System.Web.Mvc.SelectListItem不存在人口基金。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Grizzly    6 年前

    好的,根据评论,我认为这会有帮助。

    从那以后, IncidentNumber LandLostPersonDetail 上课,那么你应该用 DropDownListFor 而不是 DropDownList . 下拉列表 允许基于您的模型进行客户端验证。。所以如果在你的 陆上人尾巴 类。。这么说吧 意外数字 是必需的。。如果提交表单时没有值,那么验证将在客户端进行,而不必等待并转到 if (ModelState.IsValid) 在服务器端。

    以下是我建议更改的内容:

    在你的HttpGet操作中

    ViewBag.IncidentNumberSelection = new SelectList(db.IncidentNumbers.ToList(), "IncidentNumber1", "IncidentNumber1");
    

    在你看来

    <div class="form-group">
        @Html.LabelFor(model => model.Incident_Number, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Incident_Number,(IEnumerable<SelectListItem>)ViewBag.IncidentNumberSelection, "-- Select Incident Number --", new { @class = "form-control" })
        </div>
    </div>
    

    然后,在你的 HttpPost 操作结果。。您将不再需要:

    var items = db.IncidentNumbers.ToList();
    ViewBag.data = new SelectList(items.Select(x => new { Text=x.IncidentNumber1, Id=x.Id, Value = x.IncidentNumber1 }).ToList());
    

    如果有帮助,请告诉我。

        2
  •  1
  •   Thirupathi cst    6 年前
     @Html.DropDownListFor(m => m.IncidentNumber, new SelectList(ViewBag.data, "IncidentNumber", "IncidentNumber"))
    

    在控制器中,您必须使用 意外数字 财产