【问题标题】:MVC 4 DropDownList can't add to modelMVC 4 DropDownList 无法添加到模型
【发布时间】:2014-09-16 15:55:18
【问题描述】:

您好,我是 MVC 4 的新手,在尝试使用 Html.DropDownList 时遇到了错误。

这是我当前的代码。

工作模型:

  namespace Payroll.CORE
  {
  public class Job
  {
     public int JobID { get; set; }
     public string JobTitle { get; set; }

    public virtual ICollection<Employee> Employees { get; set; }
  }
}

员工模型:

    public int EmployeeID { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public int PhoneNumber { get; set; }
    public int CellNumber { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public int PostalCode { get; set; }
    public string BankName { get; set; }
    public int BankAccountNumber { get; set; }
    public string PayInterval { get; set; }
    public double NormalRate { get; set; }
    public double OvertimeRate { get; set; }
    public double SetHours { get; set; }
    public System.DateTime DateOfEmployment { get; set; }
    public System.DateTime LastPaymentRecieved { get; set; }
    public string Active { get; set; }
    public int JobID { get; set; }

    public virtual ICollection<Absent> Absents { get; set; }
    public virtual ICollection<Bonus> Bonuses { get; set; }
    public virtual Job Job { get; set; }
    public virtual ICollection<Holiday> Holidays { get; set; }
    public virtual ICollection<HoursWorked> HoursWorkeds { get; set; }
    public virtual ICollection<Payrolls> Payrolls { get; set; }
    public virtual ICollection<Deduction> Deductions { get; set; }

查看:

     <div class="editor-label">
        @Html.LabelFor(model => model.JobID)
    </div>
    <div class="editor-field">
        @Html.DropDownList("ListSL")

    </div>

控制器:

   [HttpGet]
    public ActionResult Create()
    {

        List<SelectListItem> jobs = new List<SelectListItem>();
        List<Job> list = bll.GetJobCatergories();

        foreach (var a in list)
        {
            jobs.Add(new SelectListItem { Text = a.JobTitle, Value = a.JobID.ToString()       });
        }

        ViewBag.ListSL = jobs;
        return View();
    }

我现在无法将 JobID 的值添加到我的模型中。我曾尝试使用 @Html.DropDownListFor 但无法使用 SelectListItem 填充它。

我真的没有问题让它与隐藏字段或任何东西一起工作,所以任何帮助都将不胜感激。

提前致谢。

编辑: 抱歉应该更清楚一点。我正在创建一名员工,并且该员工被分配了一份工作。因此,我尝试将选定的 Items 列表值添加到 Employee 中的 Value int JobID 中。

值也显示在下拉列表中,我需要在提交时将所选值添加到员工模型中。

【问题讨论】:

  • 您在此处发布了控制器,而不是模型。让我们看一下模型,我们会更好地了解需要什么。
  • @barrick 是的,抱歉,这正是我想添加的计划,但似乎我的注意力还不够集中。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 drop-down-menu


【解决方案1】:

好的,现在模型在那里,试试:

@Html.DropDownListFor(mdl => mdl.Job.JobID,
                      new SelectList(ViewBag.ListSL,
                          "Value",
                          "Text",
                          Model.JobID),
                      "-- Please Select --")

我还要补充一点,就我个人而言,我不喜欢使用 ViewBag,因为您会丢失静态类型,因此在这种情况下需要将其转换回 SelectList。每当我需要一个下拉列表时,我在模型上有一个静态属性,它返回将填充下拉列表的所有项目,所以我最终得到,例如:

new SelectList(Model.AllJobs,....)

【讨论】:

  • 是的,很抱歉,在添加问题时我有点累并且很困惑。至于我理解你的回答,你是在为工作模式增加价值吗?我还需要将它添加为员工 JobID。我的强类型模型是雇员。
  • 不,您不需要更改模型即可使上述答案起作用,尽管如果您拥有 Job 实体的外键,我认为您不需要单独的 JobID 字段 - 大概,在此模型中,Model.JobID 将始终与Model.Job.JobID 相同?尝试第一个解决方案 - 关于 ViewBag 的部分不会影响它,只是个人喜好;它不会影响功能。
  • 我已经尝试过您的解决方案,但它给了我一个空参考。让我确保我们处于同一水平。这些类由实体框架生成。我正在创建一个员工,并为创建员工创建了一个自动生成的视图。当我创建员工时,我有一个下拉列表,您可以在其中选择员工工作,并且从数据库生成为 List。类中的 Job 是它与实体框架创建的链接,因为它具有从 Employee 到 Job 的多对一关系。
  • 好的,我明白了。在这种情况下,如果这是 Create 视图,并且渲染时模型中没有选择作业,则删除 Model.JobID 位(保留右括号和逗号)。
  • @RudolphOpperman 哈哈!!很高兴有帮助。我可能记得 - 我确实想在纽兰兹的测试中看到 SA 对英格兰的比赛!
【解决方案2】:

因为我看不到你的模型...

@Html.DropDownListFor( x => x.JobIdSelected, new SelectList(Model.JobId, "Value", Model.JobId) )

在您的模型中创建一个属性 JobIdSelected ,它将绑定。

请注意,您将丢失原始选择列表,因此如果您有任何模型错误,则需要将列表重新发送回视图。

【讨论】:

  • 感谢您的快速回复,我已更新我的问题以显示我的模型。我已经在员工中有一个 JobID,并且需要在单击提交时将 DropdownBox 中的选定值添加到模型员工。
  • 我认为你应该从控制器返回一个模型而不是使用ViewBag,如​​果你以后重构代码你会得到更多的好处......
【解决方案3】:

应该是

@Html.DropDownListFor(m => m.JobID, (IEnumerable<SelectListItem>)ViewBag.ListSL)

这会将所选值绑定到属性 JobID,使用 ViewBag.ListSL 作为选项

【讨论】:

  • 问题是我没有 SelectList 我有 selectListItem 并且不能转换 (SelectListItem)ViewBag.ListSL。是否有简单的方法来转换 List -> SlectList?
  • 然后使用(IEnumerable&lt;SelectListItem&gt;)ViewBag.ListSL
  • 好的,我用过,但现在提交时出现此错误。没有具有键“JobID”的“IEnumerable”类型的 ViewData 项。
  • 如果@Html.LabelFor(model =&gt; model.JobID) 工作正常,那么@Html.DropDownListFor(m =&gt; m.JobID, (IEnumerable&lt;SelectListItem&gt;)ViewBag.ListSL) 将工作,但为什么你的模型有属性int JobID 和Job Job 还包括属性int JobID?您是否还在视图中声明了您的模型,即@model YourAssembly.Employee?此外,您的控制器应返回模型,即return View(new Employee())
  • 该类是由 EF 生成的,它表明它在 EMployee 和 Job 之间具有一对多的链接。是的,我已经声明了我的@model,它是由 Razer 使用创建模板自动生成的强类型视图。通过工作,我的意思是它用值填充了列表。但是当我按下提交按钮时,我无法检索到该值。我可以从下拉列表中使用 Formcollection 获取值吗?
猜你喜欢
  • 2013-08-03
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多