读取__EVENTTARGET会导致事件未被调用

时间:2014-01-03 14:23:47

标签: c# asp.net webforms

我想使用有关单击哪个控件来设置页面的信息。我用它在代码中设置一个可排序的表。我通过这个论坛发现我可以使用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);,就会再次调用回调。

1 个答案:

答案 0 :(得分:1)

你的逻辑有问题。您有一个动态创建的控件LinkButton,并且连接了LinkButton_Command事件处理程序。对于要在回发时触发的服务器端事件,控件必须存在于页面控制树中。这意味着,无论LinkButton值如何,都必须始终创建,配置动态hdrCell.Controls并将其添加到sortRequest。只有这样,它才能了解从Request点击它并触发其Command事件的事实。