• ASP.NET MVC 中使用JavaScriptResult


    在浏览器地址栏输入地址,在页面上想通过脚本弹出一个框,看到Controller下有个JavaScript方法,返回的类型是JavaScriptResult,于是想用这个方法弹出框,

    public ActionResult Index()
            { 
                return  this.JavaScript("<script>alert(“操作成功')</script>");
            }

    访问页面时,在火狐上显示的是js文本

    image

    在IE上是下载文件

    image

    查看响应头信息,Content Type 为application/x-javascript,返回的是js代码。

    image

    所以,不能访问页面时使用this.JavaScript输出脚本,弹出提示框。

    可以使用this.Content输出脚本,弹出提示框,像这样

    public ActionResult Index()
            { 
                return  this.Content("<script>alert('操作成功')</script>");
            }

    image

    当然,也可以视图页面上写js,同样可以达到相同的效果。

    那么,JavaScriptResult怎样用呢,可以在页面上使用jQuery方法  getScript,向服务器获取js代码,然后执行js代码,所以服务端代码就改成这样

    public ActionResult Index()
            {
                return this.JavaScript("alert('操作成功');");
            }

    注意的是,不需要加上<script>标签,所以不要写成this.JavaScript(“<script>alert('操作成功');</script>”)。

    那么在Index2页面上这样写,请求/home/index

    <script>
                $.getScript("/home/index");
            </script>

    最后访问/home/index2页面会弹出一个框

    image

    那么this.Content和this.JavaScript有什么不同

    this.Content的返回类型是ContentResult,this.JavaScript的返回类型是JavaScriptResult,

    反编译ContentResult和JavaScriptResult,可以看到不同之处

    image

    JavaScriptResult设置ContetTypew为application/x-javascript,而ContentResult可以自定义ContentType,

    既然这样,可以使用this.Content(“alert(‘操作成功’)”,“application/x-javascript,”)代替this.JavaScript(“alert(‘操作成功’)”)

    复制代码
    public ActionResult Index()
            {
                return this.JavaScript("alert('操作成功');");
            }
    
            public ActionResult ReplaceContentMethod()
            {
                return this.Content("alert('操作成功');", "application/x-javascript");
            }
    复制代码

    然后在Index2页面使用getScript分别请求/home/index ,/home/replacecontentmethod,看下效果

    /home/index的响应头如下

    image

    /home/replacecontentmethod的响应头如下

    image

    可以看到,两者是一样的

    JavaScriptResult的使用有两个必要的前提:

    1.Ajax

    2.jquery.unobtrusive-ajax.js

    使用代码示例

    controller

    public ActionResult JavaScriptTest()
    {
        return JavaScript("alert('Controller.JavaScriptResult test');");
    }

    View

    复制代码
    <script src="~/Scripts/jquery-1.11.2.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
    
    <!--用Ajax生成-->
    @Ajax.ActionLink("display", "Display", new AjaxOptions())
    @using (Ajax.BeginForm("Display", new AjaxOptions()))
    { 
    }
    <!--html代码-->
    <a data-ajax="true" href="/Area/SubNode/Display">display</a>
    <form action="/Area/SubNode/Display?id=1" data-ajax="true" id="form0" method="post"></form>
    复制代码

    仔细看View里面的代码,上面的script引用加上的jquery.unobtrusive-ajax.js,下面data-ajax=true。两者缺一不可,否则返回的网页就不是弹框,而是网页源代码。

    成功:

    失败:

    还有一种失败的表现形式是下载页面文件。失败原因都是上面的两个方面没有写好。

    JavaScriptResult里面的string除了可以调用系统的函数以外,还可以执行指定的js。

    public ActionResult ServerMethod(int id, string name)
    {
        string result = "客户端传递过来的id:" + id + ",名字:" + name;
        return JavaScript(@"$(""#result"").html(""" + result + @""");");
    }

    参考资料:http://www.tuicool.com/articles/VJR7Zv

    http://mazharkaunain.blogspot.com/2011/02/how-to-use-aspnet-mvc-javascriptresult.html

  • 相关阅读:
    python 用到的函数记录
    scala函数定义的四种方式
    java mail使用中遇到的550类型错误
    @Secured(), @PreAuthorize()
    jQuery each
    基于jQuery动态创建html元素
    jQuery validate在没有校验通过的情况下拒绝提交
    区别: @Secured(), @PreAuthorize() 及 @RolesAllowed()
    http meta
    注解:@Autowired
  • 原文地址:https://www.cnblogs.com/Alex80/p/7967987.html
Copyright © 2020-2023  润新知