【问题标题】:Can I use a Web ApiController to fetch a SelectList for a Html.DropDownList?我可以使用 Web ApiController 为 Html.DropDownList 获取 SelectList 吗?
【发布时间】:2013-12-31 11:11:45
【问题描述】:

也许我没有抓住重点,但我想从 Web API 控制器的 MVC 视图中检索一些下拉列表的数据。

我想简单地构建这样的东西:

API 控制器:

public class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ListController : ApiController
{
    public IEnumerable<Foo> GetFoos()
    {
        return new List<Foo>( new[]
            {
                new Foo()
                {
                    Id = 1,
                    Name = "Foo 1"
                },
                new Foo()
                {
                    Id = 3,
                    Name = "Foo 3"
                }
            });
    }
}

所以,在我看来,我正在尝试像这样使用 Html 扩展助手:

@Html.DropDownList("FooId", new SelectList(Html.Action("GetFoos","api/List")))

嗯,很明显,这给了我错误:

'System.Web.Mvc.SelectList.SelectList(System.Collections.IEnumerable)' 的最佳重载方法匹配有一些无效参数

但我似乎找不到合适的方法来做到这一点。

有可能吗?还是我需要使用 JQuery 进行 AJAX 调用?

(ps。我知道在处理视图到服务器调用时会影响性能。这只会让我现在的生活更轻松一些)

提前致谢。

【问题讨论】:

  • 我建议你使用 Select2.js (ivaynberg.github.io/select2)。它是高度可配置的,能够从远程源获取数据,还允许您格式化几乎所有与外观有关的内容。

标签: c# .net asp.net-mvc asp.net-mvc-4 asp.net-web-api


【解决方案1】:

@Html.DropDownList 旨在与 ViewModel 一起使用,它不会检索服务请求。为此,您必须通过 ajax 请求从客户端调用您的服务,是的。

通常您只需将模型传入您的视图并在服务器端构建下拉列表。

【讨论】:

  • 我明白了,因为我有很多下拉列表,我想我会构建自己的扩展方法。否则我会不断地用列表填充我的视图模型或用 jquery 构建它们,一遍又一遍。
  • 或者只使用 1000 个 jquery 插件中的一个,它可以为您提供所有这些功能
  • 既然您似乎对此有很多经验:您会推荐哪个插件?
  • 通常我在我的应用程序中为所有这些值列表创建一个特殊的位置(我喜欢称它们为 LOV),所以,每个需要填写组合的人,只需要询问每个组合所需的特定 LOV。这样,您将拥有某种组合数据源存储库;)
  • demos.kendoui.com/web/dropdownlist/remotedatasource.html 例如。但是您也可以在您的 mvc 视图文件夹中为您的下拉菜单创建一个编辑器模板,并将其简单地用于描述服务调用的自定义模型,这将是一种非常优雅的方式。在模板中,您只定义了一次 ajax 调用等,在您的视图中,您可以使用 @Html.EditorFor()
猜你喜欢
  • 2014-06-23
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
相关资源
最近更新 更多