我希望能够显示一个页面,但禁用所有控件。这个想法是让用户查看标准页面,但实际上并不与页面交互。禁用所有UI控件服务器端很简单,但我主要担心的是一个“有创造力”的用户试图用假信息手动发布表单。我的问题有两个:
答案 0 :(得分:2)
解决你的两个问题之一:
如果事件验证没有捕获它,有没有办法全局抛弃回发事件(例如按钮点击,而不是整个生命周期)?
一个选项可能是向ViewState添加值,如果该值存在于回发上,则将用户重定向到错误页面。应该捕获用户篡改视图状态。这不符合您希望仅丢弃回发事件,但可能会在从您认为无法回发的页面收到回发后重定向到错误页面。
if (ViewState["PageSetToReadOnly"] != null)
{
// Redirect to error page.
}
另一种选择是检查它是否是页面的PreInit事件中的回发,如果是,则取消连接事件处理程序:
if (Page.IsPostBack)
{
this.Button1.Click -= new EventHandler(Button1_Click);
}
答案 1 :(得分:2)
不,你无法阻止正常的Postback
进程。
您如何确定是否应禁用该页面? Postback
在您的按钮处理程序中使用相同的检查。如果是的话,请不要保存任何信息。
public void button1_Click(object sender, EventArgs e)
{
if(Page is disabled)
{
return
}
//Do normal save routine
}
答案 2 :(得分:1)
我认为全局取消回发的最佳方法是覆盖此Page方法。您可以执行在OnLoad事件期间设置DoNotProcessPostBack所需的任何逻辑:
Protected Overrides Sub RaisePostBackEvent(sourceControl As IPostBackEventHandler, eventArgument As String)
If DoNotProcessPostBack = False Then
MyBase.RaisePostBackEvent(sourceControl, eventArgument)
End If
End Sub
sourceControl是执行回发并跳过MyBase.RaisePostBackEvent的控件基本上无效为它引发事件。