【问题标题】:How to Return a JSON Object from an ASP.NET MVC Action Method如何从 ASP.NET MVC 操作方法返回 JSON 对象
【发布时间】:2012-11-09 16:23:40
【问题描述】:

当我在控制器中时,我需要将实体对象 (Product) 传递回视图以在 JavaScript 中使用。

我将模型对象从动作方法传递给视图。模型对象包含视图显示所需的一些数据,而且(我正在努力解决的一点)产品数据的 JSON 版本。

在视图中,我想将产品对象作为 JavaScript 来使用。

控制器:

public ActionResult ViewProduct( int  productKey )
{
    VendorPage page = PageManager.Instance().GetProductPage( );
    Product product = this.repoProducts.Get<Product>( App.GetVendorKey(), productKey );

    JavaScriptSerializer    sz = new JavaScriptSerializer();
    string json = sz.Serialize( new { pr = product } );

    ProductPageModel  ppm = new ProductPageModel( page, product );
    // Embed the product as json in the model
    ppm.js = json;

    if ( product != null )
    {
        return View( "Product", ppm );
    }
    return null;
}

View - 使用模型作为 ProductPageModel @model SiteEngine.SiteEngineUI.Models.ProductPageModel html……

所以,问题是:我如何在 JavaScript 中获得对产品的访问权限,以便执行类似...

alert( product.Name );

【问题讨论】:

  • 您是否尝试过更改返回方式,并尝试通过 JsonResult 来实现?
  • 不知道怎么做,我需要从控制器转到所需的视图,因为这不是 ajax 调用。

标签: c# javascript .net asp.net-mvc


【解决方案1】:

在视图上试试这个:

<script type="text/javascript">
  var product = jQuery.parseJSON(@Model.js);
</script>

如果你不使用 jQuery,请查看http://www.json.org/js.html

【讨论】:

  • 谢谢,我确实使用了 jQuery,但没有看到 parseJSON。经过一些调试后,它似乎确实可以与控制器中的 JavaScriptSerializer 一起使用,除了其中包含与号的文本 - 这给了我一个解析错误,直到我发现问题。 JavaScriptSerializer 将与号 (&) 编码为 \\u0026 杀死解析器。
  • 接下来,文本中还有其他一些 js 编码的字符,它们也会导致 parseJSON 因无效字符而失败。有没有一种技术可以解决这个问题?
  • 其实控制器中的序列化字符串是这样的:
  • "{\"AvProductKey\":246,\"VendorKey\":1}" // 缩减版本,但在视图中,通过 product = $.parseJSON( '@(Model. js)');该字符串看起来像'{“AvProductKey”:246,“VendorKey”:1}'。解析器失败是因为 "我想。
  • 在 JavaScriptSerializer 上尝试 DataContractJsonSerializer :msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 2016-06-05
  • 2011-01-23
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2016-01-21
相关资源
最近更新 更多