Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 我可以将JSON而不是模型从控制器传递到Razor视图吗_Asp.net Mvc_Asp.net Mvc 3_Razor_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 我可以将JSON而不是模型从控制器传递到Razor视图吗

Asp.net mvc 我可以将JSON而不是模型从控制器传递到Razor视图吗,asp.net-mvc,asp.net-mvc-3,razor,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Razor,Asp.net Mvc 4,我的视图继承了以下内容:- @model MvcApplication.Models.Application 但我需要知道,是否可以像传递模型对象一样,将JSON对象传递给视图? 因为我有以下控制器:- public ActionResult ListPackages() { using (var client = new WebClient()) { var query = HttpUtility.ParseQueryString(string.Empty);

我的视图继承了以下内容:-

@model MvcApplication.Models.Application
但我需要知道,是否可以像传递模型对象一样,将JSON对象传递给视图? 因为我有以下控制器:-

public ActionResult ListPackages()
{
    using (var client = new WebClient())
    {
        var query = HttpUtility.ParseQueryString(string.Empty);
        //code goes here ....
        return Content(json, "application/json");
    }
}
它使用API调用返回JSON,然后我使用JavaScript在视图上显示JSON,如下所示:

 $.ajax({
            url: $('#geturl').data('url'),
            type: 'GET',
            cache: false,
            success: function (result) {
                $.each(result.data, function (key, val) {
                    var str = val.packageName;
                    $('<li/>', { text: str })
                        .appendTo($('#products'));
                });
            }
$.ajax({
url:$('#geturl')。数据('url'),
键入:“GET”,
cache:false,
成功:功能(结果){
$.each(result.data,function(key,val){
var str=val.packageName;
$('
  • ',{text:str}) 。附件($(“#产品”); }); }
  • 使用JavaScript显示JSON的问题是,它会使我很难轻松处理JSON对象,例如基于返回的JSON创建链接或创建包含JSON的表。因此,我的问题是:是否可以将JSON对象而不是模型对象从我的控制器传递到我的视图?

    r-vs客户端混淆 你在这里说的是两件事:

  • 创建视图:控制器将模型传递给服务器端的视图,使用JSON这样做没有多大意义,因为内存中的对象正在传递给视图引擎

  • 在客户机上使用JSON数据:这里讨论的是客户机-服务器Ajax通信,从客户机请求数据并从服务器返回JSON。这与传递到视图的模型数据毫无关系

  • 使用JSON的最佳解决方案 为了方便地使用JSON数据(在您的例子中,它是一个包数组)在客户端生成生成填充HTML的方法是在客户端使用某种模板。jQuery过去有非最终模板插件,也就是说。我对它有很好的经验,但也有其他插件。使用你觉得最熟悉其语法的插件

    这些模板放在哪里?
  • 如果您知道在创建视图时从服务器传递的JSON对象的结构,您可以将模板放在视图中,它们只需等待,直到在客户端上使用

  • 如果您不知道JSON对象的结构,那么您必须沿着JSON对象或作为单独的请求传递模板

  • 第一种方法是通常的方法,第二种方法很少使用,而且更具动态性

    不使用JSON的最佳解决方案 如果您不喜欢将JSON解析为HTML结果(手动或使用模板),则始终可以向控制器操作发出Ajax请求,这将返回准备好的HTML作为部分视图,而不是JSON结果。这样,您就可以轻松地将HTML放在页面上,而无需任何JSON数据操作

    您从中获得了什么?假设您的应用程序中有以下功能:

  • 您有一个显示分页包列表的视图
  • 当用户第一次访问页面时,返回包的第一页
  • 分页到下一页是通过Ajax完成的,列表被返回的数据替换
  • 如果要为后续Ajax请求创建部分视图,则可以在主视图中使用相同的部分视图来显示包的第一页。这将确保您只需更改一个部分视图,并且在初始页面加载和后续包分页时显示也会更改

    如果使用view+JSON+模板,这意味着您必须维护包列表的两个演示文稿:第一个页面的视图中使用的演示文稿和显示后续页面的模板

    那是哪一个呢? 在所有条件相同的情况下,这会使第二种解决方案更好。但是,当然,选择取决于您的情况(条件不相同),您应该能够确定哪种方案在您的场景中是最好的。

    服务器端与客户端的混淆 你在这里说的是两件事:

  • 创建视图:控制器将模型传递给服务器端的视图,使用JSON这样做没有多大意义,因为内存中的对象正在传递给视图引擎

  • 在客户机上使用JSON数据:这里讨论的是客户机-服务器Ajax通信,从客户机请求数据并从服务器返回JSON。这与传递到视图的模型数据毫无关系

  • 使用JSON的最佳解决方案 为了方便地使用JSON数据(在您的例子中,它是一个包数组)在客户端生成生成填充HTML的方法是在客户端使用某种模板。jQuery过去有非最终模板插件,也就是说。我对它有很好的经验,但也有其他插件。使用你觉得最熟悉其语法的插件

    这些模板放在哪里?
  • 如果您知道在创建视图时从服务器传递的JSON对象的结构,您可以将模板放在视图中,它们只需等待,直到在客户端上使用

  • 如果您不知道JSON对象的结构,那么您必须沿着JSON对象或作为单独的请求传递模板

  • 第一种方法是通常的方法,第二种方法很少使用,而且更具动态性

    不使用JSON的最佳解决方案 如果您不喜欢将JSON解析为HTML结果(手动或使用模板),则始终可以向控制器操作发出Ajax请求,这将返回准备好的HTML作为部分视图,而不是JSON结果。这样,您就可以轻松地将HTML放在页面上,而无需任何JSON数据操作

    您从中获得了什么?假设您的应用程序中有以下功能:

  • 您有一个显示分页包列表的视图
  • public ActionResult ListPackages() { using (var client = new WebClient()) { var query = HttpUtility.ParseQueryString(string.Empty); //code goes here .... var model = new JavaScriptSerializer().Deserialize<MyViewModel>(json); return View(model); } }