首页 > 解决方案 > 如何将列表从控制器/视图发送到 JS 脚本

问题描述

我在 Razor 页面中有一个列表,我想在 java 脚本中使用它。我正在使用 viewdata 发送数据以查看 VIewbag 出于某种原因在 razor 页面中工作。我正在使用 .net 核心 2.2

我已经尝试过的事情。

看法

我已经尝试过的事情:

  1. var a=@Model.listname
  2. var stringArray = @Html.Raw (Json.Serialize(ViewData["Quest"]));` viewdata[Quest] 包含列表
  3. string jsonn = JsonConvert.SerializeObject(quelist);` 然后发送 jsoon 来查看。
  4. 使用自定义类对象并使用 Newtonsoft.Json 创建创建 json 对象并发送到视图

如果您提出 ajax 解决方案,请稍微解释一下,因为我对此不太了解或分享链接以进行解释

Razor 页面 .cs 文件 注释掉的东西

public async Task OnGetAsync()
{           
  ViewData["opt1"] = o1list;
  ViewData["quest"] = quelist;
  //   string jsonn = JsonConvert.SerializeObject(quelist);
  //   ViewData["Jon"] = jsonn;
  QuestionBank = await _context.QuestionBank
                .Include(q => q.QuestionLevel)
                .Include(q => q.QuestionStyle)
                .Include(q => q.Teacher)
                .Include(q => q.Topic).ToListAsync();
   Answer = await _context.Answer.ToListAsync();
   QSID = await _context.QSID.ToListAsync();

看法

    @{var name = (List<String>)ViewData["Quest"]; }
    <script>
    /*function test() {
    var array = @Html.Raw(Json.Serialize(ViewData["Jon"]));
    for(var i = 0; i < array.length; i++) {
        alert(array[i]);
        console.log(array[i]);
    }
    }
    test();
    */</script>
</head>
<body>
    @{
          Model.run();
          var name = (List<String>)ViewData["Quest"];
          var nam = (List<String>)ViewData["opt1"];
          int j = 0;
          for (int i = 0; i <= 4; i++)
          {
              var a = name[i];
              <p > @a </p>

              <form action="">
                  <input type="radio" name="s" value="">@nam[j]<br>
                  @{j = j + 1; }
                  <input type="radio" name="s" value="">@nam[j]<br>
                  @{j = j + 1; }
                  <input type="radio" name="s" value="">@nam[j]<br>
                  @{j = j + 1; }
                  <input type="radio" name="s" value="">@nam[j]
                  @{j = j + 1; }
              </form>
          }
    }

我希望得到一个包含我的列表或 json 格式的数组

标签: c#.netasp.net-corerazor-pagesasp.net-core-2.2

解决方案


这就是我在我创建的项目中的做法:

<script>
    var saleTypesById = @Html.Raw(JsonConvert.SerializeObject(Model.TypesById));
</script>

其中 Model.TypesById 是一个Dictionary<long,SaleType>.

要从 javascript 中使用,我调用:

var selectedSaleType = saleTypesById[selectedId];

然后我可以像这样调用它的属性selectedSaleType.Comission

此代码需要@using Newtonsoft.Json;指令和对相应 nugget 包的引用。


推荐阅读