我想使用有关单击哪个控件来设置页面的信息。我用它在代码中设置一个可排序的表。我通过这个论坛发现我可以使用Request.Form.Get("__EVENTTARGET")
。但是,只要我对该参数执行某些操作,就不再调用回调函数。这是预期的行为,还是我犯了错误?
这里是我的代码的一些片段。 Page_Load()中的代码是:
string sortRequest = Request.Form.Get("__EVENTTARGET");
bool isCurrentField = false;
if (sortRequest != null) isCurrentField = sortRequest.Contains(header.Field);
if (!isCurrentField)
{
// Add a hyperlink for sorting to the cell
LinkButton newLink = new LinkButton();
newLink.Text = header.Title;
newLink.Font.Bold = true;
newLink.ID = "link" + header.Field;
newLink.CommandName = "Sort";
newLink.CommandArgument = header.Field;
newLink.Command += new CommandEventHandler(LinkButton_Command);
hdrCell.Controls.Add(newLink);
}
else
{
hdrCell.Text = header.Title;
hdrCell.Font.Bold = true;
}
我的回调:
public void LinkButton_Command(Object sender, CommandEventArgs e)
{
_sortOrder = e.CommandArgument.ToString();
}
我也尝试过将sortRequest复制到一个临时变量中,但这没有什么区别。一旦我注释掉行if (sortRequest != null) isCurrentField = sortRequest.Contains(header.Field);
,就会再次调用回调。
答案 0 :(得分:1)
你的逻辑有问题。您有一个动态创建的控件LinkButton
,并且连接了LinkButton_Command
事件处理程序。对于要在回发时触发的服务器端事件,控件必须存在于页面控制树中。这意味着,无论LinkButton
值如何,都必须始终创建,配置动态hdrCell.Controls
并将其添加到sortRequest
。只有这样,它才能了解从Request
点击它并触发其Command
事件的事实。