使用 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。我的想法是

在我的脚本中,我成功地通过这种方式获得了我的 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...
}