javascript上的.netmvc视图循环只更新表中的第一行



我的循环中有两行。

我有两个问题:

  1. JavaScript似乎在每次迭代中都在执行;然而,它只是用结果填充第一个表行数据。

  2. 我必须在脚本中硬编码JSON对象(目前(,但理想情况下,我希望使用模型数据中的动态JSON字符串。尽管每当我尝试引用它(@item.requestExample(时,JavaScript都会失败,浏览器中的检查/控制台显示它正在引用字符串并查找无效令牌。它正在查找CCD_ 3,而不是CCD_。(我假设这是字符串的HTML表示?(如何将其转换为真正的JavaScript对象?我试过:

    var obj = JSON.parse('@(HttpUtility.HtmlDecode(@item.requestExample))');
    

    var obj = dataString.replace(/"/g, '"');
    

    两者都没有运气,因为一旦在JavaScript中引用@item.requestExample,它就会发现无效的令牌并抛出标志。

以下是我在mvc视图中的完整循环:

@foreach (var item in Model.list)
{
<tr class="table-info">
<td>@item.library</td>
<td>@item.api</td>
<td>@item.ibmiPgm</td>
<td> <pre id="uglyPretty"></pre> </td> 
<script>
var pretty = document.getElementById("uglyPretty");
var obj = { "success": 1, "resultMessage": "Success", "list": [{ "custNo": "101", "firstName": "First Name: 101", "lastName": "Last Name: 101", "address1": "Address1: 101", "address2": "Address2: 101", "city": "City: 101", "state": "10", "zip": "101", "routing": "101", "accountNo": "101" }, { "custNo": "102", "firstName": "First Name: 102", "lastName": "Last Name: 102", "address1": "Address1: 102", "address2": "Address2: 102", "city": "City: 102", "state": "10", "zip": "102", "routing": "102", "accountNo": "102" }] };
document.getElementById("uglyPretty").innerHTML = JSON.stringify(obj, undefined, 2);
</script>
<td>
<button typeof="button" onclick="location.href='@Url.Action(item.api, "", new { api = item.api, jsonRequest = item.requestExample } )'">Consume API</button>
</td>
</tr>
}

在我看来,您只是试图将模型项中的一些JSON显示到表单元格中,对吧?问题是JSON没有格式化,所以你试图漂亮地打印它
如果是这样的话,你会让这件事变得更加困难。

不要试图将JSON转换为Javascript对象只是为了重新格式化它;而是使用C#方法进行重新格式化。由于您的问题用json.net标记,我假设您的项目中安装了json.net。如果是这样,您可以用以下代码替换所有笨拙的脚本代码:

<td>
<pre>@Newtonsoft.Json.Linq.JToken.Parse(item.requestExample).ToString()</pre>
</td>

所以整个循环看起来是这样的:

@foreach (var item in Model.list)
{
<tr class="table-info">
<td>@item.library</td>
<td>@item.api</td>
<td>@item.ibmiPgm</td>
<td>
<pre>@Newtonsoft.Json.Linq.JToken.Parse(item.requestExample).ToString()</pre>
</td>
<td>
<button typeof="button" onclick="location.href='@Url.Action(item.api, "", new { api = item.api, jsonRequest = item.requestExample } )'">Consume API</button>
</td>
</tr>
}

最新更新