Asp.net 核心如何在没有 AJAX 调用的情况下在 Razor 页面中获取 JSON 值

Asp.net core how to get json value in razor page without ajax call

提问人:topcool 提问时间:11/13/2023 最后编辑:topcool 更新时间:11/13/2023 访问量:56

问:

我从服务器端收到一个字符串,我想访问其值。Ajax 调用未接收此字符串,我希望在 Razor Page 中具有其值。json

enter image description here

在上图中,从服务器端接收到两个值 和 。我怎样才能在剃须刀页面中?resultcountcount

编辑

感谢那些回答的人。

我将详细解释这个问题。我在剃须刀页面中没有模型。实际上,我使用组件在网格中显示信息,在没有 Ajax 的情况下接收到 json 字符串。Syncfusion

public IActionResult FetchData([FromBody] DataManagerRequest dm)
{
   IEnumerable DataSource = _userRepository.GetUserList();
   int count = DataSource.Cast<UserListViewModel>().Count();
   return dm.RequiresCounts ? Json(new { result = DataSource, count = count }) : Json(DataSource);
}

这是:cshtml

@{
    ViewData["Title"] = "Student List";
}

<ejs-grid id="moshaver">
   <e-data-manager url="/Users/FetchData" adaptor="UrlAdaptor"></e-data-manager>
   <e-grid-columns>
   <e-grid-column headerText="First Name" field="FirstName"></e-grid-column>
            ...
   </e-grid-columns>
</ejs-grid>

表很好地绑定了,但我不知道如何获取值resultcount

jquery asp.net-core razor razor-pages

评论

0赞 Md Farid Uddin Kiron 11/13/2023
您能否分享一下您的 json 数据的外观以及您的 razor 页面方法的结构?
0赞 freedomn-m 11/13/2023
如果实际上有 JSON,则在 Razor 中:@{ var x = @Model.JsonVariable }
0赞 Md Farid Uddin Kiron 11/17/2023
您好,您是否尝试过提供的解决方案?你对此还有什么顾虑吗?如果您需要进一步的帮助,请告诉我?

答:

0赞 Md Farid Uddin Kiron 11/13/2023 #1

我从服务器端收到一个 json 字符串,我想访问它 值。Ajax 调用未收到此字符串,我想要 它在 Razor Page 中的值。

好吧,如果你能分享你的json数据格式或你的剃刀页面结构是什么样子的,那就更好了。但是,根据你的方案和说明,可以通过在 Razor 页面中调用 JSON 数据来直接访问 json 数据。您将需要使用JsonConvert.DeserializeObject

如果 JSON 数据是模型或 ViewData 的一部分,则可以直接在 Razor 页面的标记中访问它。即使来自原始 json 数据,也可以通过以下方式访问。

例如,假设您有以下 json 原始数据

[
  {\"key\": \"FirstName\", \"value\": \"Kiron\" }, 
  { \"key\": \"LastName\", \"value\": \"Md Farid\" }
]

为了在 razor 页面中调用上面的 json 原始数据,您可以这样做:

cshtml.cs:

public class IndexModel : PageModel
{
    private readonly ILogger<IndexModel> _logger;
    public string RazorPageRawJsonData { get; set; }
    public IndexModel(ILogger<IndexModel> logger)
    {
        _logger = logger;
    }

    public void OnGet()
    {
        RazorPageRawJsonData = "[ { \"key\": \"FirstName\", \"value\": \"Kiron\" }, { \"key\": \"LastName\", \"value\": \"Md Farid\" }]";
    }
}

cshtml:

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}


<p>RAW JSON From cshtml.cs</p>
<pre>@Model.RazorPageRawJsonData</pre>

<p>Parsed JSON value:</p>
@{
    int count = 0;
    var jsonData = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(Model.RazorPageRawJsonData);
    
    foreach (var item in jsonData)
    {

        var key = item["key"];
        var value = item["value"];
        count = jsonData.Count;

        <p>Key: @key, Value: @value</p>
    }
    <p> Count: @count</p>
       
}

注意:我使用的是原始 json,所以我将数据类型保持为动态,但您可以根据需要保留类型,无论是强类型类还是您需要的任何类型。

输出:

enter image description here

enter image description here

注意:如果您想在剃须刀页面上了解更多信息,请参阅此官方文档

评论

0赞 topcool 11/13/2023
谢谢你的回答。我编辑了问题
0赞 Md Farid Uddin Kiron 11/14/2023
感谢您的更新,为什么不直接在 tempdata 或模型属性值中传递计数值呢?