我目前有2个dbContexts,我不确定这是否有所作为。 ApplicationDbContext和CompanyDBContext。这些表已经在数据库中设置,我在companydetails表中添加了数据。
我的代码可能有一些问题,我不确定我在视图中做了什么关于companyID是正确的,但主要是我的问题是我不确定为什么我的linq查询没有返回任何结果当我的表格中有数据时。
我的CompanyDBContext按原样
public class CompanyDBContext : DbContext
{
public DbSet<CompanyDetails> companies { get; set; }
}
这是我的模特
public class CompanyDetails
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int? companyID { get; set; }
[Display(Name = "Company Name")]
public string CompanyName { get; set; }
}
我编写了一个linq查询,该查询应该返回我放入数据库的一行。使用这个linq查询,然后构建一个SelectListItems列表,我将其传递给viewbag,然后我希望能够有一个带有公司名称的下拉框,用户可以在其中选择。
public ActionResult Register()
{
//var regViewModel = new RegisterViewModel();
List<SelectListItem> companyList = null;
using(var companies = new CompanyDBContext())
{
var companyNamesQuery = (from comp in companies.companies
select new SelectListItem
{
Text = comp.CompanyName,
Value = comp.companyID.ToString()
});
companyList = companyNamesQuery.ToList();
@ViewBag.companies = companyList;
}
return View();
}
这是视图,
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Create a new account.</h4>
<hr />
@Html.ValidationSummary("", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.userCompanyID, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.userCompanyID, new SelectList(ViewBag.companies, "companyID", "CompanyName"))
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Register" />
</div>
</div>
}
这是我的连接字符串
<add name="DefaultConnection" connectionString="Data Source=xxxxxx\SQLEXPRESS;Initial Catalog=DBTest;User ID=x;Password=Xxxxx1;Persist Security Info=False;" providerName="System.Data.SqlClient" />
<add name="DevConnection" connectionString="Data Source=xxxxxx\SQLEXPRESS;Initial Catalog=DBTest;User ID=x;Password=Xxxxx1;Persist Security Info=False;" providerName="System.Data.SqlClient" />
答案 0 :(得分:0)
根据评论,仔细检查您的连接字符串。您指向错误的服务器,错误的数据库或数据从未进入表中。
这一行:
@Html.DropDownListFor(m => m.userCompanyID, new SelectList(ViewBag.companies, "companyID", "CompanyName"))
在这一行:
var companyNamesQuery = (from comp in companies.companies
select new SelectListItem
{
Text = comp.CompanyName,
Value = comp.companyID.ToString()
});
您创建了一个新的SelectListItem列表。您的视图中只有属性文本和值可用。
此下拉列表应为:
@Html.DropDownListFor(m => m.userCompanyID, new SelectList(ViewBag.companies, "Value", "Text"))
答案 1 :(得分:0)
答案是因为我没有使用正确的连接字符串。当我创建了与我的dbContext名称不同的新连接字符串时,我没有将连接字符串传递给基类