MVC中如何在controller的action中输出JS到页面上

编辑器加载中...这个问题有点怪,不过这是项目开发时一个同事问我的问题,实现上完成这个需要很容易, 通过HTTP上下文对象(HttpContext)就可以了. 你在action中的HttpContext就是这个action所指向的页面的上下文,所以向页面输出JS,我们可以这样实现

HttpContext.Response.Output.Write("<script>alert('OK,呵呵')</script>");

这个意思是说,将write()里的文本流追加到当前HTTP响应流中。

小知识:在ASPX中输出文本信息我们通常会这样实现


<% Html.RenderPartial("lori");//当前controller下的lori分部视图或者shared目录下的分部视图 %>
<%= "lori.zhang" %>

<%
Response.Write("lori.zhang"); //方法 %>

<% %>中包含了.net的语句,本身不是用来表示输出的,那么为什么刚才代码中的Html.RenderPartial方法也会生成页面内容 呢?那是因为RenderPartial方法直接向当前HttpContext.Response.Output里写入字符了。而我们用 Response.Write来输出内容,其实在Response类(HttpResponseBase,可提供来自 ASP.NET 操作的 HTTP 响应信息,它是抽象类)的Write方法内部就是输出到Output中。


即使我们的页面中使用了HtmlTextWriter来输出内容,但它内部也是封装了Output所暴露出的TextWriter中。为了 验证,您可以在代码中设置断点并观察Render方法的writer参数,在“正常情况下”可以发现writer.InnerWriter属性是一个 HttpWriter对象,这是个TextWriter的子类,也是ASP.NET中定义的内部类型。

<%=%>与<%response.write()%>的区别

它们输出到页面的效果是一样的。但是实际上前者是使用页面的HtmlTextWriter对象输出的,而后者则直接向Response.Output里输 出内容。(节选自,老赵点滴)


posted @ 2011-12-18 00:21  张占岭  阅读(4559)  评论(0编辑  收藏  举报