asp mvc5为现有项目添加一个表,用于下拉列表数据

时间:2016-03-10 17:21:02

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

使用asp MVC5项目,有一个可用的SQL表。问题是如何添加第二个表以保存常用的数据,如姓名,电话,电子邮件等;目标是在View页面上显示主项目的下拉菜单,以便他们填充或“自动填充”姓名,电子邮件等相关字段。

 [Table("newInfoTable")]
public class InfoTable
{

    [Key]
    public int ID { get; set; }
    [Display(Name = "First Name")]
    [StringLength(255)]
    public string firstName { get; set; }
    [Display(Name = "Last Name")]
    [StringLength(255)]
    public string lastName { get; set; }
    [Display(Name = "Contact Phone Number")]
    public string phoneNumber { get; set; }
    [Display(Name = "Email Address")]
    [StringLength(255)]
    public string emailAddress { get; set; }
    }

在主表中,有一个对该表的引用:

    public virtual ICollection<InfoTable> InfoTableDat { get; set; }

此新信息表中的所有变量名称都与Main项目表中的名称匹配。新的SQL表是使用SQL Management Studio创建的,经过测试,创建了一个新的控制器/视图,并且能够从项目中添加项目/编辑或删除到该表。

在View中,编辑页面,intellisense可以看到@ Model.InfoTableDat但是如何填写下拉列表?

使用“public virtual ICollectioninstanceName”是否正确,或者只是根据ID链接2个表?它出错了:

  应用程序中的服务器错误。

     

列名'MainProj_ID'无效。
       描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪   有关错误及其来源的更多信息   代码。

主项目类在Model文件夹中名为MainProj.cs,但是没有MainProj_ID,我从不对任何名称使用下划线。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题是正确的,我就是这样做的。 您需要下载所有InfoTableDat行,其中每个选项的文本都是来自infotable的全名,值是ID

之前,您必须将以下字段添加到InfoTable模型中:

callAnother()

这可确保您拥有可用作文本的全名。要从下拉列表中获取数据,您必须将以下内容添加到控制器中的操作中:

[NotMapped]
public string FullName {
    get {
        return firstName + " " + LastName
    }
}

“FullName”是文本字段,“ID”是下拉列表值的字段

要显示下拉列表,请使用以下HtmlHelper:

ViewBag.InfoTables = new SelectList(Model.InfoTableDat, "FullName", "ID");

要使所有这些工作正常,您需要在jQuery中使用eventlistener来获取下拉列表。然后,此事件需要对方法执行AJAX调用,该方法使用下拉列表中的所选选项的ID获取特定InfoTable的详细信息。当你通过提取数据。 AJAX,剩下的就是将数据附加到视图中的现有字段。

我就是这样做的