【问题标题】:DropdownList selected value not saved in databaseDropdownList 所选值未保存在数据库中
【发布时间】:2013-10-30 14:11:51
【问题描述】:

我需要很大的帮助,我是 Asp.net MVC 4 应用程序开发的新手,实际上我在单击提交按钮后将下拉列表选择的值保存在数据库中时遇到了问题。

我使用调试指针检查 HTTP post 对象中的值,但它不包含下拉列表选择值它总是在除法原始中显示空值我需要一些专家建议来解决这个问题我浏览了几个示例并尝试几次,但我仍然没有适当的解决方案。

模型类:

public partial class tblEmployee
{
    public int EmployeeId { get; set; }
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Nullable<System.DateTime> DateOfBirth { get; set; }
    public Nullable<System.DateTime> DateOfJoin { get; set; }

    public string Position { get; set; }
    public string Office { get; set; }
    public string Division { get; set; }

    public Nullable<decimal> Salary { get; set; }
    public virtual tblDivision Divisions { get; set; }
}


public partial class tblDivision
{
    public int value { get; set; }
    public string Division { get; set; }
    public Nullable<int> SelectId { get; set; }
}

控制器类:

namespace EmpiteHrSystem.Controllers
{
    public class EmployeeController : Controller
    {
        private EmpiteContext db = new EmpiteContext();

        public ActionResult Create()
        { 
            ViewBag.DivisionOptions = new SelectList(db.tblDivisions, "value","Division");

            return View();
        }

        //
        // POST: /Employee/Create

        [HttpPost]
        public ActionResult Create(tblEmployee tblemployee)
        {
            if (ModelState.IsValid)
            {
                try
                { 
                    db.Entry(tblemployee).State = EntityState.Added;

                    db.tblEmployees.Add(tblemployee);
                    db.SaveChanges();
                }
                catch (ArgumentException ae)
                {
                    ModelState.AddModelError("", ae.Message);

                }
                return RedirectToAction("Index");
            }
        }
    }
}

查看:

@model EmpiteHrSystem.Models.tblEmployee
@{  ViewBag.Title = "Create"; Layout = "~/Views/Shared/_Layout.cshtml";}

@Html.EditorFor(model => model.EmployeeId) 

@Html.ValidationMessageFor(model => model.EmployeeId)

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

@*@Html.EditorFor(model => model.Office)*@

@Html.DropDownList("DivisionOptions")

@Html.ValidationMessageFor(model => model.Division)

@Html.ActionLink("Back to List", "Index")

【问题讨论】:

  • 实在不清楚是什么问题。哪个值是空的? HTML 表单是否包含该值的元素?请具体说明问题。
  • @David actaully Dropdownlist 用数据库中的值填充它已经正确完成问题是当我在下拉列表中选择项目并单击提交按钮时它不会将下拉列表选择值保存在数据库中以检查我使用的问题当我检查 tblemployee 对象时,调试点附近创建操作,它的 Division 字段为空值,但是当我使用 EditorFor 时,它已经有数据:(
  • 实际上我以错误的方式使用下拉列表?或者有人知道完成这项任务的最佳方法,使用另一种技术

标签: asp.net sql-server asp.net-mvc-4 razor c#-5.0


【解决方案1】:

您的DivisionOptions 下拉列表未正确绑定回模型,因为它的名称错误。当您的下拉列表绑定到 DivisionOptions 时,您的模型正在寻找名称为 Division 的属性。你有几个选择。

  1. 使用强类型帮助器

    @Html.DropDownListFor(x=>x.Division, (SelectList)ViewBag.DivisionOptions)

  2. 重命名当前代码并传入 SelectList

    @Html.DropDownList("Division", (SelectList)ViewBag.DivisionOptions)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2011-11-10
    相关资源
    最近更新 更多