MVC DropDownListFor未显示添加到列表

时间:2017-01-11 13:30:45

标签: jquery asp.net-mvc html.dropdownlistfor

我在视图中有这个下拉列表,我用DB填充了值。我正在组合一些值并尝试对齐它们:

                        foreach (DataRow dr in dt.Rows)
                        {
                            string loc = dr.IsNull("STATEGEOG_LOC_NAME") ? "" : dr["STATEGEOG_LOC_NAME"].ToString();
                            if (loc.Length < maxloc)
                                loc = SetStringLength(loc, maxloc);
                            string name = dr.IsNull("NAME") ? "" : dr["NAME"].ToString();
                            if (name.Length < maxname)
                                name = SetStringLength(name, maxname);
                            string mtf = dr.IsNull("MTF_CODE") ? "" : dr["MTF_CODE"].ToString();
                            if (mtf.Length < maxmtf)
                                mtf = SetStringLength(mtf, maxmtf);
                            TextValuePair model = new TextValuePair()
                            {
                                Value = dr.IsNull("IEN") ? "" : dr["IEN"].ToString(),
                                Text = loc + " " + name + " " + mtf
                            };
                            countries.Add(model);
                        }

    private static string SetStringLength(string input, int len)
    {
        return input.PadRight(len, ' ');
    }

我比较的值只是找到DB中最长的值,并用空格填充当前值,使其长于。我看到每一行都是这样的:

 "MARYLAND                               10 CSH (FT MEADE MD)                          A11B1 "

我将它发送到视图:

    [HttpGet]
    public ActionResult GetAllGeoLocations()
    {
        return Json(Repository.GetGeoLocationList(), JsonRequestBehavior.AllowGet);
    }

它像这样加载到DDL中:

    $.ajax({
        type: 'GET',
        dataType: 'json',
        url: '@Url.Action("GetAllGeoLocations")',
        success: function (data) {
            $("#ddlLocation").empty();
            $.each(data, function (Value, Text) {
                var opt = '<option value=' + Text.Value + '>' + Text.Text + '</option>';
                $("#ddlLocation").append(opt);
            });
        }
    });

我调试页面时检查的每个值都显示正确的填充。但是当点击下拉列表时,填充消失了。谁能告诉我为什么?

当我在页面中使用调试器时,我看到加载到DDL中的值如下:

 "<option value=6005>VIRGINIA                               1 DENTAL SQ/SGD                               F1783 </option>"

但下拉列表显示:

enter image description here

1 个答案:

答案 0 :(得分:1)

不要责怪MVC / Razor。 这是浏览器。 尝试用

替换option-value中的空格
"&nbsp;"

尝试使用:

var opt = '<option value=' + Text.Value + '>' + Text.Text.replace(/\s/g, "&nbsp;") + '</option>';

在你的$ .each看。

这将强制空白。