我想填充&在MVC中使用Dapper綁定一個下拉列表控件,並且我無法在網上找到一個很好的示例。我可以找到很多關於如何將靜態定義的下拉列表綁定到更新數據庫(例如「Male」或「Female」)並可以使其工作的示例。我也可以找到很多從數據庫中填充下拉列表的例子,但是我不能讓他們一起工作。如何使用Razor和MVC填充DropDown列表?
我只想讓我的ProjectManifest/Create表單有一個下拉列表填充當前的項目。
我希望我能更好地問這個問題,但我不知道我在做什麼錯。我在代碼中嘗試了數十種變體,並在StackOverflow上嘗試了不同的教程和問題。我從Visual Studio接收到的錯誤非常無用,它們通常只是NullReference異常,並且HTML Helper函數調用中有很多變量,我甚至不知道什麼是null。
這些都是一些我曾經試圖用它來幫助理解我的問題的文章:
- Populate a Dropdown List in MVC View
- User HTML Helper to populate a DropDown list
- Value cannot be null. Parameter name: entitySet
- https://www.youtube.com/watch?v=k9CJmLbnFko
- http://dotnetmentors.com/mvc/how-to-bind-dropdownlist-in-asp-net-mvc-application.aspx
- Binding Data To DropDownList MVC Razor
- Asp.Net MVC with Drop Down List, and SelectListItem Assistance
我認爲這個問題是在我的索引文件,我不明白Lambda表達式或什麼期望是要在爭論的HTML輔助「DropDownListFor」或「DropDownList的」
索引視圖
@using (Html.BeginForm("Index", "ProjectManifests", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
....
@Html.LabelFor(model => model.ManifestID)
@Html.EditorFor(model => model.ManifestID)
@Html.ValidationMessageFor(model => model.ManifestID)
@Html.DropDownListFor(model => model.ProjectID, Model.Projects)
....
<input type="submit" value="Create" class="btn btn-default" />
}
控制器
public class ProjectManifestsController : Controller
{
[HttpGet]
public ActionResult Index()
{
Models.ProjectManifestModel model = new Models.ProjectManifestModel();
DatabaseHelper.ConnectionString = ConfigurationManager.ConnectionStrings["MTConnectionString"].ConnectionString;
ProjectRepository pr = new ProjectRepository();
List<SelectListItem> projects = new List<SelectListItem>();
foreach (Project p in pr.GetProjects())
{
projects.Add(new SelectListItem { Value = p.ProjectID.ToString(), Text = p.ProjectName });
}
model.Projects = projects;
ViewBag.Projects = projects;
return View();
}
}
視圖模型
public class ProjectManifestModel
{
[Key]
public int ManifestID { get; set; }
public int ProjectID { get; set; }
....
public HttpPostedFileBase Attachment { get; set; }
public IEnumerable<SelectListItem> Projects { get; set; }
}
這段代碼的狀態會產生不同的錯誤,我道歉:
Compiler Error Message: CS1503: Argument 3: cannot convert from 'System.Collections.Generic.IEnumerable<Poscarp.TabLibrary.Project>' to 'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>'
Source Error:
Line 29: @Html.DropDownListFor(model => model.ProjectID, Model.Projects)
NullReferenceException異常是非常有幫助......上面什麼是實際的錯誤發佈的代碼?什麼是空? – GregH
您顯示的代碼不會生成您已經顯示的錯誤 - 它將生成_The具有鍵'ProjectID'的ViewData項的類型爲'System.Int32',但必須爲'IEnumerable'類型,因爲您沒有將模型傳遞給視圖(使用'return View(model);') –
您顯示的錯誤只能在屬性Projects'爲IEnumerable'(而不是IEnumerable ')時生成 –