This question already has answers here:
Is making an asp:Button control invisible enough to be sure users won't be able to click it?

(3个答案)


5年前关闭。




这是在ASP.NET Web表单中,我在屏幕上有一个保存按钮。当我最初加载页面时,在某些情况下,不会呈现“保存”按钮。
button1.visible = false

在我的按钮点击事件中,我有这个
public void button1_click(Object sender, EventArgs e)
{
    SaveData();
}

防止用户被保存的唯一安全措施是是否呈现保存按钮。

在MVC中,仅通过使用我自己修改后的请求对服务器进行HTTP POST来访问save按钮操作方法将是微不足道的。

在ASP.NET Web表单中,我有点困惑,因为它依赖于已发回的加密ViewState。我还需要将此安全性添加到button1_click事件吗?如果是这样,那么您能告诉我客户端如何在不显示按钮的情况下向服务器发送回传到单击事件的服务器吗?

最佳答案

那是关于ViewState的常见错误之一-它不提供您的点击事件和许多其他功能。

每次单击按钮(如果启用了自动回发,则单击复选框)将引发一个表单提交到服务器。有关单击内容的所有信息都以纯文本形式包含在表单回发数据中。然后服务器解析此数据,并且当您的按钮实现了IPostBackDataHandler时,它会引发诸如“已单击按钮ID”之类的适当事件。因此,您实际上可以更改请求正文:

D__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPD...&ctl00%24_pdContent%24txtEmail=qwe%40aeqw.ry&ctl00%24_pdContent%24btnRtnUser=Login&__EVENTVALIDATION=%2FwEWDAL424aUAQLjtYbqCAKu8qTUCQLXm%2BfNAwKk2O%2B4DgK3ypStCAL6q%2BaACgKBnvb9CQLr8ey6CALxoZvDCALFt96ABgLMorjMAwoW3zW69NNlOXygWNnB6luGVWnk

在上方,您可以看到id = ctl00__pdContent_txtEmail的输入内容和单击id = ctl00__pdContent_btnRtnUser的登录按钮。

WebForms here中有关服务器事件的更多说明。

并且,请阅读有关ViewState here或什至更好的解释here的更多信息。

关于c# - 如果未呈现按钮,客户端可以通过编程方式获得按钮单击事件吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31809789/

10-17 02:24