日期:2014-05-17  浏览次数:20563 次

vs2012 使用 mvc3.0 调用Response.Write问题?
本帖最后由 bjhui 于 2012-11-22 08:52:55 编辑 3之前用VS2010 + MVC2.0 在views的aspx页面文件调用后台方法,方法内写了Response.Write("aaaa") 则直接在当前位置打印,但是现在用了MVC3.0 ,在cshtml文件中 调用同样的后台方法,却在打印到了body的最开始地方,请高手帮忙分析一下到底是什么原因,如何解决?我想让mvc3.0也和2.0一样输出到当前位置。

mvc2.0写法如下:
<body>
...
<div>
<% Common.Write(); %>
</div>
...
<body>

mvc3.0写法如下:
<body>
...
<div>



在线等高手赐教!!!1

@{Common.Write();}
</div>
...
<body>


后台方法:
piblic static void Write()
{
    HttpContext.Current.Response.Write("<a href='#'>bbbbbbbb</a>");
}

2.0输出结果
<body>
...
<div>
<a href='#'>bbbbbbbb</a>
</div>
...
<body>

3.0输出结果
<body>
<a href='#'>bbbbbbbb</a>
...
<div>
</div>
...
<body>
------最佳解决方案--------------------
razor视图是先render到内存缓冲区,而不是直接写到response输出流。
要把Common.Write方法改成这样:

public static class Common
{
public static void Write(this HtmlHelper helper)
{
helper.ViewContext.Writer.Write("aaaa");
}
}
在View里面这样写:
@{Html.Write();}
记得在头上加上 @using Common类所在的namespace;

------其他解决方案--------------------
20.和3.0的结果是一样啊,你是不是贴错了,你试试JS打印效果,可以打指指定DIV内容
------其他解决方案--------------------
引用:
20.和3.0的结果是一样啊,你是不是贴错了,你试试JS打印效果,可以打指指定DIV内容


3.0我是用的Razor(CSHTML) 视图引擎,仔细看了 肯定没错。确实是这个结果