【问题标题】:MVC5 populating DropDownList [duplicate]MVC5填充DropDownList [重复]
【发布时间】:2016-02-02 15:33:20
【问题描述】:

我刚刚开始使用 MVC 5 设计模式进行开发,我正在尝试使用数据库中的数据填充我的 DropDownList,这就是我的 Country 模型中的内容:

public class Country 
{
   public DataTable GetAllCountries()
   {
     string theSql = "SELECT * FROM Country";
     IDataAccess dataAccess = new DataAccess();
     return dataAccess.GetData(theSql);
   }
}

然后在我的控制器中我有:

public ActionResult Index()
{
   List<SelectListItem> objResult = new List<SelectListItem>();
   Models.Country country = new Models.Country();
   DataTable result = country.GetAllCountries();

   foreach(DataRow item in result.Rows)
   {
      SelectListItem temp = new SelectListItem();
      temp.Value = item["id"].ToString();
      temp.Text = item["country"].ToString();
      objResult.Add(temp);
   }
      ViewBag.DropDownResult = objResult;
      return View();
}

然后在我的部分视图中,我有:

@model MyProject.Models.Country
@Html.DropDownListFor(ViewBag.DropDownResult as List<SelectListItem>)

然而DropDownListFor 我收到这个错误:

方法 'DropDownListFor' 没有重载需要 1 个参数

有谁知道我做错了什么?如果我也正确地遵循 MVC 模式?

谢谢大家

【问题讨论】:

  • 向你的视图模型添加一个属性来存储和使用它。 post 中的工作示例代码
  • @Shyju 我添加了一个属性只是为了测试东西,但它仍然不起作用
  • 在哪里添加了一个属性?在您的视图模型中?只要您在 DropDownListFor 辅助方法中使用该新属性,它就可以正常工作。看看我在之前评论中发布的链接。它有一个工作样本。
  • @Shyju 我了解,但从您的工作示例中,您采取了不同的方法
  • 是的。它使用具有 2 个属性的视图模型,一个用于下拉数据,一个用于选定值。有问题吗?

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


【解决方案1】:

您需要指定要在哪个对象中显示属性。

@Html.DropDownListFor 至少需要 2 个参数。第一个应该是对象,第二个应该是包含项目的列表。 比如:

 @model MyProject.Models.Country
 @Html.DropDownListFor(m => m.SomeProperty, ViewBag.DropDownResult as List<SelectListItem>)

【讨论】:

  • DropDownListFor() 不接受 string 作为第一个参数,并且您的代码会引发异常 - 它必须是 @Html.DropDownListFor(m =&gt; m.SomeProperty, ViewBag.DropDownResult as List&lt;SelectListItem&gt;)
  • @StephenMuecke 我在回答中说它应该是一个对象。编辑得更精确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多