如何在更新面板中编写response.write

时间:2010-10-06 13:18:03

标签: asp.net

我正在调用一个来自Homescroll.ascx的Homescroll.ascx.cs中的函数

所以我在Homescroll.ascx上写道  <%Response.Write(scroll()); %GT;

但所有这些都在更新面板中,我收到错误。 他们以任何其他方式从homescroll.ascx调用函数到homescroll.ascx.cs,而不是response.write();

6 个答案:

答案 0 :(得分:4)

在UpdatePanel中

<%= scroll() %> 可以,但<% Response.Write(scroll()) %>不会。

与流行的看法相反,<%= %> 显示表达式并不精确地表示Response.Write,而不像他们在asp经典中所做的那样。它们都在渲染阶段执行。不同之处在于display-expressions写入传递给render函数的HtmlTextWriter,而不是直接写入Response对象。通常这没有任何区别。除非您正在使用UpdatePanel,它需要捕获ContentTemplate的输出,以便它可以以其特殊格式对输出进行编码。如果直接调用Response.Write,则绕过UpdatePanel执行的编码并弄乱响应,以便无法在客户端解析它。

执行此操作时发生的错误非常有用:

  

Sys.WebForms.PageRequestManagerParserErrorException:   从服务器收到的消息   无法解析。常见原因   这个错误是在响应时   通过调用Response.Write()进行修改,   响应过滤器,HttpModules或   服务器跟踪已启用。

UpdatePanel provides workarounds的作者在他的博客上。

答案 1 :(得分:1)

如何使用语法 - <%= scroll() %>

答案 2 :(得分:0)

需要更多信息,但我认为滚动只是一个客户端函数的名称,你应该使用这样的脚本管理器:

ScriptManager.RegisterClientScriptBlock(this,typeof(Page),"scrollScript","scroll();",true);

有关详情,请参阅http://msdn.microsoft.com/en-us/library/bb350750.aspx。如果您不想;从后面的代码中调用它,则不需要&lt; %%&gt;或respoonse.write。只需将其包装在脚本标记中,类型设置为text / javascript。

答案 3 :(得分:0)

Reponse.Write打破了UpdatePanel中的输出,我在这里写了一篇可能的解决方案:http://timscyclingblog.wordpress.com/2013/03/07/asp-net-web-forms-response-write-in-an-updatepanel-dev-web/ 希望它能帮助将来的其他人,虽然它有点偏离主题,因为其他解决方案不需要写入响应。

答案 4 :(得分:0)

我使用的一个简单的解决方案是调用jQuery函数和append() HTML,而不是调用Response.Write()。例如,假设我想更新UpdatePanel中的一些HTML文本并更改其Text我会做这样的事情:

使用Response.Write(),这很简单:

Response.Write("[TextToBeAddedToHTML]");

但是使用jQuery,它有点复杂,你必须将jQuery库包含在HTML页面中:

ScriptManager.RegisterStartupScript(this, GetType(), "TextUpdate", "$(\"#[ID_OF_HTML_Element]\").append(\"<p>" + [TextToBeAddedToHTML] + "</p>\");", true);

答案 5 :(得分:0)

System.Text.StringBuilder sb = new System.Text.StringBuilder();

sb.Append(@"<script type='text/javascript'>");
sb.Append("alert('Usuario agregado Correctamente.');");      
sb.Append(@"</script>");
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "AddHideModalScript", sb.ToString(), false);