有没有办法让 Response.Write 在 UpdatePanel 中工作,并且不会因为明显的原因导致应用程序出错?或者,有没有一种方法可以在 C# 中不超过一行代码的情况下获得类似的结果?
5 回答
您可以在更新面板中放置一个文字控件,并使用以下方法获得相同的效果:
myLiteral.Text += "Some more text!";
刚刚发现这可能对其他人有帮助。
您不能在更新面板中使用 Response.Write 或 Response.Redirect。
要解决这个问题,您必须使用触发器。这用于从更新面板内部进行服务器旅行
<asp:UpdatePanel ID="UpdatePanel9" runat="server">
<Triggers>
<asp:PostBackTrigger ControlID="btnExcel" />
</Triggers>
<ContentTemplate>
---Your code here
</ContentTemplate>
这里的 ControlID 是按钮或其他控件。例如,在按钮单击事件中,您可以在响应中写入一些文本。
我使用的这个问题的一个简单解决方案是调用 JQuery 函数 html() insted 调用 Response.Write()... 例如,假设我想更新 UpdatePanel 中的一些 html 文本,我会这样做:
使用 Response.Write(),它会很简单:Response.Write("[TextToBeAddedToHTML]");
但是 Jquery 有点复杂,你必须在 Html 页面中包含 Jquery 库:
ScriptManager.RegisterStartupScript(this, GetType(), "TextUpdate", "$(\"#[ID_OF_HTML_Element]\").html(\"<p>" + [TextToBeAddedToHTML] + "</p>\");", true);
获得类似行为(大致相似)的唯一方法是将标签放在更新面板中,该面板正在对该部分回发进行更新,并将其值设置为某个值(只需一行代码即可设置它)。 .. 页面的其余部分根本没有更新,因此您无能为力。
为什么你仍然想要这个功能?
Response.Write
不适用于 UpdatePanels,但正如 Spencer 所提到的,您可以将您的信息放在文字中。
System.Diagnostics.Debug.Assert()
如果您正在调试,另一种选择是使用该功能。这样做的好处是
- 您可以将它们放入您的代码中,它们将被编译出一个版本,
- 您可以将它们放置在永远不会发生错误的地方,但会弹出以让您知道它们何时发生(仅在您调试时),并且
- 您的代码将在 Assert 行暂停运行,因此您确切知道放置该 Assert 的位置发生了什么。
与任何事情一样,不要过分将它们放在任何地方,但我发现它是一个非常有用的调试工具。