我在视图中有这个下拉列表,我用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>"
但下拉列表显示:
答案 0 :(得分:1)
不要责怪MVC / Razor。 这是浏览器。 尝试用
替换option-value中的空格" "
尝试使用:
var opt = '<option value=' + Text.Value + '>' + Text.Text.replace(/\s/g, " ") + '</option>';
在你的$ .each看。
这将强制空白。