我正在嘗試使用 dapper 將下拉串列系結到 SQL 表中的值,但下拉串列為空。是顯示正確的行數,但它們都是空的。在 dapper 呼叫的除錯值中,我看到它回傳了正確的行數 (3) 并且 Id 是正確的。- 所以我認為資料被正確檢索但未顯示。我是 MVC 和 ASP 的新手,因此非常感謝任何幫助。
控制器.cs
public ActionResult AddPilot()
{
ViewBag.Message = "Add new pilot.";
PilotModel program = new PilotModel();
program.ProgramList = new SelectList(LoadDropDown("SELECT [Id], [Programs] FROM tbl_ProgOverview"), "Id", "Program");
return View(program);
}
PilotModel.cs
public class PilotModel
{
public int Id { get; set; }
public string WingID { get; set; }
public string Pilot { get; set; }
public bool Ship4 { get; set; }
public bool Ship2 { get; set; }
public bool Wing { get; set; }
public bool IP { get; set; }
public bool ME { get; set; }
public bool Supervisor { get; set; }
public string Program { get; set; }
public string Program2 { get; set; }
public DateTime? PrgmStart { get; set; }
public DateTime? PrgmEnd { get; set; }
public DateTime? Prgm2Start { get; set; }
public DateTime? Prgm2End { get; set; }
public bool ExtSync { get; set; }
public SelectList ProgramList { get; set; }
}
}
查看.cthtml
<div class="form-group">
@Html.LabelFor(model => model.Program, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.Program, Model.ProgramList, "Select")
@Html.ValidationMessageFor(model => model.Program, "", new { @class = "text-danger" })
</div>
</div>
助手.cs
public static IEnumerable<PilotModel> LoadDropDown(string sql)
{
return SqlDataAccess.GetDropDown<PilotModel>(sql);
}
資料訪問.cs
public static IEnumerable<PilotModel> GetDropDown<PilotModel>(string sql)
{
using (IDbConnection cnn = new SqlConnection(GetConnectionString()))
{
return cnn.Query<PilotModel>(sql);
}
}
表“tbl_ProgOverview”只有 2 列(“Id”、“Programs”),我想要實作的只是在 model.Program 中有下拉串列,顯示“Programs”列中的值串列桌子。謝謝!


uj5u.com熱心網友回復:
Dapper:關心名字。
你有SQL:
SELECT [Id], [Programs] FROM tbl_ProgOverview
但是您的 c# 屬性是Program(或者至少,我認為您打算將其映射到該屬性)。Dapper 將忽略該Programs列而不是 set Program,因此它null在螢屏截圖中。
嘗試:
SELECT [Id], [Programs] as Program FROM tbl_ProgOverview
這會將 SQL 中的投影列名重新映射到Program,以匹配 Dapper 正在尋找的內容。或者,您可以將 C# 屬性重命名為Programs.
附帶說明:當您在 C# 代碼中使用類似"Id"或"Program"的文字時,如果需要,以后很難重命名這些屬性。您可能想嘗試nameof(PilotModel.Id)/ nameof(PilotModel.Program),這樣可以避免對這些文字進行硬編碼。如果你重命名它們:它會自動修復你的系結代碼(或者至少告訴你不存在這樣的成員)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/481110.html
標籤:C# 网 asp.net-mvc
