我对 asp.net-mvc 下拉列表做错了什么?

发布于 2024-08-31 05:57:41 字数 1122 浏览 3 评论 0原文

我在我的 create.aspx 之一中使用了一个下拉列表,但它似乎不起作用...

public IEnumerable<SelectListItem> FindAllMeasurements()
    {
        var mesurements = from mt in db.MeasurementTypes
                          select new SelectListItem
                          {
                             Value = mt.Id.ToString(),
                             Text= mt.Name
                          };
        return mesurements;
    }

而我的控制器

 public ActionResult Create()
    {
      var mesurementTypes = consRepository.FindAllMeasurements().AsEnumerable();
     ViewData["MeasurementType"] = new SelectList(mesurementTypes,"Id","Name");
     return View();
    } 

和我的 create.aspx 有这个,

<p>
  <label for="MeasurementTypeId">MeasurementType:</label>
    <%= Html.DropDownList("MeasurementType")%>
     <%= Html.ValidationMessage("MeasurementTypeId", "*") %>
   </p>

当我执行这个时,我得到了这些错误,

DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a 
 property with the name 'Id'.

I use a dropdownlist in one of my create.aspx but it some how doesnt seem to work...

public IEnumerable<SelectListItem> FindAllMeasurements()
    {
        var mesurements = from mt in db.MeasurementTypes
                          select new SelectListItem
                          {
                             Value = mt.Id.ToString(),
                             Text= mt.Name
                          };
        return mesurements;
    }

and my controller,

 public ActionResult Create()
    {
      var mesurementTypes = consRepository.FindAllMeasurements().AsEnumerable();
     ViewData["MeasurementType"] = new SelectList(mesurementTypes,"Id","Name");
     return View();
    } 

and my create.aspx has this,

<p>
  <label for="MeasurementTypeId">MeasurementType:</label>
    <%= Html.DropDownList("MeasurementType")%>
     <%= Html.ValidationMessage("MeasurementTypeId", "*") %>
   </p>

When i execute this i got these errors,

DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a 
 property with the name 'Id'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嘴硬脾气大 2024-09-07 05:57:41

在您的控制器中,您正在从 IEnumerable 创建一个新的 SelectList,这是不正确的,因为您已经指定了 Value文本属性。

您有两个选择:

public ActionResult Create()
{
    var mesurementTypes = consRepository.FindAllMeasurements();
    ViewData["MeasurementType"] = mesurementTypes;
    return View();
}

或者:

public ActionResult Create()
{
    ViewData["MeasurementType"] = new SelectList(db.MeasurementTypes, "Id", "Name");
    return View();
}

还有第三种也是首选的方法,使用强类型视图:

public ActionResult Create()
{
    var measurementTypes = new SelectList(db.MeasurementTypes, "Id", "Name");
    return View(measurementTypes);
}

并在视图中:

<%= Html.DropDownList("MeasurementType", Model, "-- Select Value ---") %>

In your controller you are creating a new SelectList from IEnumerable<SelectListItem> which is not correct because you've already specified the Value and Text properties.

You have two options:

public ActionResult Create()
{
    var mesurementTypes = consRepository.FindAllMeasurements();
    ViewData["MeasurementType"] = mesurementTypes;
    return View();
}

or:

public ActionResult Create()
{
    ViewData["MeasurementType"] = new SelectList(db.MeasurementTypes, "Id", "Name");
    return View();
}

There's also a third and preferred way using strongly typed view:

public ActionResult Create()
{
    var measurementTypes = new SelectList(db.MeasurementTypes, "Id", "Name");
    return View(measurementTypes);
}

and in the view:

<%= Html.DropDownList("MeasurementType", Model, "-- Select Value ---") %>
满栀 2024-09-07 05:57:41

正如错误消息所暗示的那样,您需要一个 IEnumerable,而不是 IEnumerable

SelectList 的构造函数有一个采用 IEnumerable 的重载。请参阅 .net MVC、SelectLists 和 LINQ

As the error message implies, you need an IEnumerable<SelectList>, not an IEnumerable<Materials>.

The constructor for SelectList has an overload that takes an IEnumerable. See .net MVC, SelectLists, and LINQ

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文