.NET MVC如何在Javascript中检索模型?

时间:2018-06-21 18:20:12

标签: javascript asp.net-core asp.net-core-mvc

我有一个产品列表和一个来自服务器的客户对象。我想在javascript上检索该信息。

  <!-- Customer object -->
  <input type="hidden" id="customer" value="@ViewBag.Customer">

  <!-- List of products -->
  <input type="hidden" id="products" value="@Model">

现在在我的JavaScript中,我有这个。

console.log(document.getElementById("customer").value);

那不起作用,我没有得到对象值。我想知道我如何达到期望的结果吗?

源代码...

<!-- Customer object -->
  <input type="hidden" id="customer" value="Namespace.Models.Customer">

  <!-- List of products -->
  <input type="hidden" id="products" value="System.Collections.Generic.List`1[Namespace.Models.Product]">

这是我的服务器端代码。

public async Task<IActionResult> Order(int customerId)
    {
        ViewBag.Customer = await customerRepository.Details(customerId);
        var product = await productRepository.GetAll();

        return View(products);
    }

2 个答案:

答案 0 :(得分:2)

根据评论,您似乎想要读取javascript中的整个模型对象,则可以使用javascript serializor从模型中创建一个json字符串。

以下是使用

的示例
<script>
    var model = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model));
    console.log(model);       
</script>

变量model将包含一个js对象(字典样式),该对象代表剃刀视图的模型对象。

由于我们正在执行C#扩展/方法(Html.RawSerializeObject),因此上述代码必须在razor视图中,而不是在外部javascript文件中(通过全局变量)。只要将js对象设置为全局变量后,您仍然可以访问外部js文件中的对象

答案 1 :(得分:0)

您需要进行一些调整才能获得所需的结果:

  1. 通过在.cshtml文件顶部指定模型来严格绑定MVC视图

    @model List<StackOverflow.Models.Product>

  2. 修改您的JavaScript代码,以将客户详细信息和产品列表解析为有效的JSON数据类型

     var customerDetails = @Html.Raw(@Json.Encode(ViewBag.Customer));
    
     // Read products list by directly referencing Model as view is strongly-typed
     var productsList = @Html.Raw(Json.Encode(Model));
    
    console.log("First Product Name:  " + productsList[0].Name);
    

此外,我认为不需要隐藏的HTML元素来存储来自服务器或任何其他来源的任何信息。这样会增加页面大小,从而导致性能下降。

除了将数据发送到ViewBag之外,您还可以简单地创建一个ViewModel并将CustomerDetails和ProductsList作为属性,然后直接解析模型,如上所示。