c# - 如果未呈现按钮,客户端能否以编程方式获取按钮单击事件?

标签 c# asp.net webforms viewstate

<分区>

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

button1.visible = false

在我的按钮点击事件中,我有这个

public void button1_click(Object sender, EventArgs e)
{
    SaveData();
}

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

在 MVC 中,仅通过使用我自己修改的请求向服务器发送 HTTP POST 来访问保存按钮操作方法是微不足道的。

在 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/

相关文章:

c# - 在 Xamarin.Forms 中使用 MVVM 进行页面导航

javascript - 即使手动将 readonly 属性设置为 false,文本框也会在回发时变为只读

c# - 覆盖 SaveChangesAsync

asp.net-mvc - 按钮不会回发

asp.net - 为什么 WebControl 事件的前缀为 "On"?

C# - 使用强名称不保护程序集

c# - 我可以在 javascript 中使用 resolveurl

c# - 为什么在ASP中的上下文中不存在The name…的编译错误?

javascript - 浏览器后退按钮使用旧的 JavaScript 加载旧页面

c# - 获取正确的日期时间