RenderControl不评估Response.Writes,但评估<%=%>?

时间:2009-11-10 14:51:24

标签: asp.net

为什么调用page.RenderControl不会评估<% Response.Write("foo") %>但它会评估<%= "bar" %>?还有其他我应该打电话的吗?

我的印象是<%= %> was shorthand for Response.Write,因为它在经典ASP中。

... <p><%= "foo" %><% Response.Write("bar"); %></p> ...

渲染控制代码......

string output;

using (var mem = new StringWriter())
using (var writer = new XhtmlTextWriter(mem))
{
     page.RenderControl(writer);
     output = mem.GetStringBuilder().ToString();
}

...输出

Expected: "<p>foobar</p>" 
Actual: "<p>foo</p>"

2 个答案:

答案 0 :(得分:3)

&lt;%=%&gt;与asp.net中的Response.Write相同。这就是为什么&lt;%=“bar”%&gt;的工作原理。

在&lt;%Response.Write(“bar”)%&gt;结尾处缺少分号。这就是为什么它不起作用。

答案 1 :(得分:1)

我的问题与您的问题相同,我的解决方案只是使用<%=...%>代替response.write(); 个人认为原因看起来像早于response.write()。一旦程序达到response.write()函数,即使在服务器端标记中,RenderControl对象也无法控制它。