使用 Jquery 循环和比较 ViewData 数据与 DropDownListFor
Looping and comparing ViewData data with DropDownListFor using Jquery
通过控制器,我将一个 ViewData 发送到我的 View (.cshtml),其中包含其他几个 ViewData 的名称。在控制器方面,我相信并以这种方式发送:
List<string> Names = new List<string>();
Names.Add(NameForViewBag.ToString());
ViewData["ViewDataNames2"] = Names;
因此,这存储了我正在创建的 ViewData 的所有名称。
然后,我正在努力的地方是如何在我的 .cshtml 端使用 Jquery 来处理这个 ViewData。我的想法是
- 获取每个 ViewData["ViewDataNames2"] 字符串;
- 将每个字符串的名称与 DropDownListFor 的名称进行比较;
- 如果 DropDownListFor 的部分名称与 ViewData 字符串名称之一匹配,我应该打印(最终,我会做更多的工作,但现在我正在尝试打印它)。
在我的脚本中,我成功地通过这种方式获得了我的 DropDownListFor 的名称:
console.log($("#SeriesTypeId option:selected").text().replace(" ", ""));
但这就是我卡住的地方。我想做一些 foreach 循环来比较这个下拉列表与 ViewData["ViewDataNames2"] 的每个字符串。我尝试了什么:
像这样检索 ViewData:
var yValue = "@ViewData["ViewDataNames2"]";
对于我的循环,我尝试了这种方式:
@foreach (var myName in (List<string>)ViewData["ViewDataNames2"])
{
<td class="text-center">FormatName('@myName.NameOfViewData2', 1);</td>
}
我也试过这个方法:
// If I try this way, on the console it will give error: SyntaxError: unexpected token: keyword 'class'
/var xValue = @ViewData["ViewDataNames"];
// If I try this way, on the console it will give error: SyntaxError: expected property name, got '&'
//var check = @(Newtonsoft.Json.JsonConvert.SerializeObject(ViewData["ViewDataNames"]));
您需要序列化列表,然后使用 Json.Parse
转换回 JavaScript 数组:
var xValue = JSON.parse('@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewData["ViewDataNames"]))');
并在 JavaScript 中将数组循环为:
for (var i = 0; i < xValue.length; i++) {
var obj = xValue[i];
//perform operation...
}
通过控制器,我将一个 ViewData 发送到我的 View (.cshtml),其中包含其他几个 ViewData 的名称。在控制器方面,我相信并以这种方式发送:
List<string> Names = new List<string>();
Names.Add(NameForViewBag.ToString());
ViewData["ViewDataNames2"] = Names;
因此,这存储了我正在创建的 ViewData 的所有名称。
然后,我正在努力的地方是如何在我的 .cshtml 端使用 Jquery 来处理这个 ViewData。我的想法是
- 获取每个 ViewData["ViewDataNames2"] 字符串;
- 将每个字符串的名称与 DropDownListFor 的名称进行比较;
- 如果 DropDownListFor 的部分名称与 ViewData 字符串名称之一匹配,我应该打印(最终,我会做更多的工作,但现在我正在尝试打印它)。
在我的脚本中,我成功地通过这种方式获得了我的 DropDownListFor 的名称:
console.log($("#SeriesTypeId option:selected").text().replace(" ", ""));
但这就是我卡住的地方。我想做一些 foreach 循环来比较这个下拉列表与 ViewData["ViewDataNames2"] 的每个字符串。我尝试了什么:
像这样检索 ViewData:
var yValue = "@ViewData["ViewDataNames2"]";
对于我的循环,我尝试了这种方式:
@foreach (var myName in (List<string>)ViewData["ViewDataNames2"])
{
<td class="text-center">FormatName('@myName.NameOfViewData2', 1);</td>
}
我也试过这个方法:
// If I try this way, on the console it will give error: SyntaxError: unexpected token: keyword 'class'
/var xValue = @ViewData["ViewDataNames"];
// If I try this way, on the console it will give error: SyntaxError: expected property name, got '&'
//var check = @(Newtonsoft.Json.JsonConvert.SerializeObject(ViewData["ViewDataNames"]));
您需要序列化列表,然后使用 Json.Parse
转换回 JavaScript 数组:
var xValue = JSON.parse('@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewData["ViewDataNames"]))');
并在 JavaScript 中将数组循环为:
for (var i = 0; i < xValue.length; i++) {
var obj = xValue[i];
//perform operation...
}