【问题标题】:Can't display data in a dropdown with MVC无法使用 MVC 在下拉列表中显示数据
【发布时间】:2015-04-23 16:01:33
【问题描述】:

我的页面上有一个下拉菜单,显示类中硬编码的数据。

我有以下名为 state 的类:

public class State
{
    public string StateCode {get; set;}
    public string StateName { get; set; }

    public static IQueryable<State> GetStates()
    {
        return new List<State>
        {
            new State{
                StateCode="DE",
                StateName="Delaware"
            },
            new State{
                StateCode="NJ",
                StateName="New Jersey"
            },
            new State{
                StateCode="PA",
                StateName="Pennsylvania"
            }

        }.AsQueryable();
    }
}

我的 Home 控制器具有以下操作:

public ActionResult Index()
    {
        return View();
    }

    public ActionResult StateList()
    {
        IQueryable states = State.GetStates();
        if (HttpContext.Request.IsAjaxRequest())
        {
            return Json(new SelectList(states,
                "StateCode",
                "StateCode"), JsonRequestBehavior.AllowGet
                );
       }
        return View(states);
    }

这是我的看法:

@section scripts {
<script type="text/javascript">
$(function () {
    $.getJSON("/Home/States/List", function (data) {
        var items = "<option>Please Select</option>"
        $.each(data, function (i, state) {
            items += "<option value='" + state.Value + "'>" + state.Text + "</option>";
        });
        $("States").html(items);
    });


});

</script>
}

@using (Html.BeginForm())
{

<label for="States"></label>
<br />
<select id="States" name="States"></select>

}

我也将此添加到我的路由中:

routes.MapRoute(
            "StatesList",
            "Home/States/List",
            new { controller = "Home", action = "StateList" }
        );

我没有收到任何错误,但我的下拉框中也没有显示任何数据。我尝试调试我的控制器,我可以看到状态数据进入了动作中的对象状态。谁能帮我诊断一下问题?

【问题讨论】:

  • $("States").html(items); 应该是 $("#States").html(items);。 (但你真的应该阅读我在你现在删除的最后一个问题中给你的链接)
  • @StephenMuecke 您的评论是一个答案,应该这样发布。
  • @ChrisPietschmann,在我的 TODO 列表中 :) - 还想解决 OP 代码的其他一些问题。

标签: asp.net-mvc dropdownbox


【解决方案1】:

$("States").html(items); 需要为$("#States").html(items);(哈希表示jQuery ID Selector)

旁注:

  1. IQueryable GetStates() 应该是 IEnumerable GetStates()(参考链接文档)
  2. 不需要创建SelectList 的额外开销 在StateList() 方法中。可以是简单的return Json(states, JsonRequestBehavior.AllowGet);,然后在ajax 中success 功能:items += "<option value='" + state.StateCode + "'>" + state.StateName + "</option>";
  3. 目前如果选择第一个选项(“请选择”),它将 发回我怀疑不是你的值Please Select 想。 Intead,给选项一个 null 值(然后你可以使用它 结合[Required] 属性强制选择)。 例如:var items = $('&lt;option&gt;Please Select&lt;/option&gt;').val('');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    相关资源
    最近更新 更多