asp.net mvc中JavaScriptResult的工作示例

时间:2009-11-04 23:11:17

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

有人可以在asp.net mvc中提供JavaScriptResult的工作示例。据我所知,它返回javascript,然后在客户端执行,并且响应的内容类型设置为text / javascript。我需要一些有用的例子才能看到这件事。

3 个答案:

答案 0 :(得分:33)

  

注意:这个答案写于2011年,现在看着它,它更像是一个黑客。最好通过命中JSON端点API的AJAX请求加载值。

这是一个实际案例: 我有一个 GlobalSettings 静态C#类,它包含在ASP.NET MVC后端方面通过整个系统使用的值的静态属性。

其中一些值需要与JS 代码共享。所以我创建了一个 Action ,它返回 JavaScriptResult ,它基本上将这些值抽出到全局JS变量中。

  

注意:更改输出缓存周期以满足您的需求

[OutputCache(Duration = 999999)]
public virtual JavaScriptResult Global()
{
        var script = $@"
            MaxNotificaitonsToShow = {GlobalSettings.MaxNotificaitonsToShow};
            ItemsPerPage = {GlobalSettings.ItemsPerPage};
        ";
    return JavaScript(script);
}

然后我通过HTML页脚在所有页面中将此操作的响应加载为JS文件:

<script type="text/javascript" src="/JS/Global"></script>

现在我可以在任何Javascript文件中获取值:

if(ItemsPerPage == 25)
{
   alert('it works!');
}

答案 1 :(得分:17)

尽可能避免

JavaScriptResult被认为是Asp.net MVC引入的反模式(完全分离关注点),因为它将Controller和View连接在一起,使它们彼此可靠。在纯粹的Asp.net MVC应用程序中,UI构建在Asp.net上,MVC和服务器端服务于此客户端实现,因此建议避免此功能。

在其他情况下可能会有用。我记得我一直在阅读与Ruby on Rails客户端相关的东西。

反正。

一个有意义的例子

一个实际的例子是将javascript代码返回给Ajax请求,该请求只会提供一些功能,这些功能将在响应时立即执行而无需任何数据操作。

你可能从哪里受益?好好想想一个应用程序,它在应用程序中使用了大量的各种客户端类。但某些页面仅使用它们的一小部分(甚至是动态分裂)。在这种情况下,您将有两种可能性:

  1. 预先加载整个客户端类树 - 要么放在一个巨大的单个文件中,要么碎片化在单独的文件中(如果视图使用一小组前面已知类的子集,那就没问题了,因为否则这会导致很多服务器请求)
  2. 在需要时按需加载类 - 或者甚至在需要时根据需要执行某些类功能。
  3. 在这种特殊情况下,第二种情况在网络流量,客户端内存资源和处理器负载方面会更好,效率更高。

答案 2 :(得分:1)

在这篇文章中查看我的回复;

MVC how to return instruction to run javascipt method?

这将返回页面的部分视图。如果你想通过一个json对象进行迭代,那么从你的控制器返回一个json对象并使用类似下面的东西;

var obj = eval('(' + msg + ')');

上面的msg是来自控制器的返回对象;

然后,

$.each(obj.Objects, function() { do something with object });

上面的“对象”是返回的json对象中的属性。

所以在c#

public class JsonObject()
{
  List<MyObjectList> Objects{get;set;}
}

将上述对象返回到视图。

这是否有意义,或者您想要一个有效的样本吗?