使用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,我从不对任何名称使用下划线。
答案 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,剩下的就是将数据附加到视图中的现有字段。
我就是这样做的