每当我在PageLoad()中测试IsPostBack时,无论是否存在发布数据,都会返回false。我的第一反应是检查表单或提交按钮中是否缺少runat =“server”标记。但是,它们都已添加,并且WriteEmail.aspx页面仍然总是为IsPostBack返回false。我也尝试使用IsCrossPagePostBack代替IsPostBack。
ListInstructors.aspx:
<form runat="server" method="post" action="WriteEmail.aspx">
...
<input type="submit" id="writeEmail" value="Write Email" runat="server" />
</form>
WriteEmail.aspx:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.Redirect("ListInstructors.aspx");
}
}
答案 0 :(得分:13)
发布!=回发。回发是指您回发到相同的页面。表单上的操作将发布到新页面。
看起来你正在做的就是使用WriteEmail.aspx页面发送消息,然后回到原来的位置。你甚至没有显示表格来收集那里的文字。这是一个非常......经典的ASP-ish ......处理事物的方式。
相反,将您使用的代码放在类不同的类中发送消息,如果需要,将该类放在App_Code文件夹中。同时将提交按钮更改为<asp:button ... />
然后,您只需将服务器点击事件中的代码称为按钮,就不要离开ListInstructors.aspx
页。
回复您的评论:来自MSDN:
...通过将页面URL分配给实现IButtonControl接口的按钮控件的PostBackUrl属性来发出跨页请求。
答案 1 :(得分:2)
IsPostBack
不正确,因为表单未从WriteEmail.aspx
页面提交;从同一页面提交表单是导致PostBack
的原因。如果您从WriteEmail.aspx
页面提交了表单,那么它将是PostBack
;事实上,它只是一个帖子。
您可能会发现此MSDN参考很有用: