我想在典型的ASP.NET Web表单中实现有限状态机(FSM)。我希望每次发生Page_Load()事件时都会自动调用FSM“引擎” - 这很容易 - 但我还希望引擎能够接收有关导致Page_Load()发生的事件的信息。难点在于,在ASP.NET Web表单中,用户控制的事件(例如按钮单击)可能导致页面重新加载,但是按钮单击本身的事件处理程序直到Page_Load()之后才会被调用。事件火灾。据我所知,Page_Load()处理程序本身不包含有关导致页面重新加载的用户事件的任何信息。我宁愿不必在每个事件处理程序方法中显式调用FSM引擎。有没有办法实现这个目标? - 要在页面生命周期中使用Page_Load()或其他某个阶段,“知道”特定的用户操作导致页面重新加载吗?
答案 0 :(得分:1)
ASP.NET Web窗体会将其存储在Request
对象的参数中。你可以这样得到它:
// Find the control name
string nameOfControlWhichCausedPostback = page.Request.Params.Get("__EVENTTARGET");
然后找到具有该名称的控件:
if (!String.IsNullOrWhitespace(nameOfControlWhichCausedPostback ))
{
var ctrl = page.FindControl(nameOfControlWhichCausedPostback );
}