1

我有一个与IPostBackEventHandler.

在那个控件里面,我有一个 DropDownList。

这个 DropDownList 应该用它的参数引发回发事件。

DropDownList _ddl = new DropDownList();
_ddl.Attributes.Add(HtmlTextWriterAttribute.Onchange.ToString()
    , this.Page.ClientScript.GetPostBackEventReference(this, "this.value"));

我要做的是在回发时获取 DropDownList 的选定值。

public void RaisePostBackEvent(string eventArgument)
{
}

当我从 RaisePostBackEvents 收到时,我只得到“this.value”。不是从下拉列表中选择的值。

我该如何解决这个问题?

4

1 回答 1

1

为了实现您的目标,分配ID_ddl并将其作为参数传递给GetPostBackEventReference.

DropDownList _ddl = new DropDownList();
_ddl.ID = "MyDropDownList";
_ddl.Attributes.Add(HtmlTextWriterAttribute.Onchange.ToString()
    , this.Page.ClientScript.GetPostBackEventReference(this, _ddl.ID));

然后,RaisePostBackEvent您需要通过其ID提供的控件找到您的控件,eventArgument并以这种方式获取SelectedValue.

public void RaisePostBackEvent(string eventArgument)
{
    DropDownList _ddl = FindControl(eventArgument) as DropDownList;
    if (_ddl == null) return;

    string selectedValue = _ddl.SelectedValue;
    // do whatever you need with value
}

为什么不能使用 JavaScript this.value?不支持 JavaScript 调用,如果您查看生成的 HTML,您将看到:

__doPostBack('ctl02','MyDropDownList');

其中__doPostBack函数如下:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

如您所见,参数recipient等于用户控件的参数。当你通过电话时,它就到了。将值分配给隐藏字段,然后与表单一起提交。这是调用的第二个参数。ctl02UniqueIDthisGetPostBackEventReferenceeventArgument__EVENTARGUMENTGetPostBackEventReference

所以第二个参数GetPostBackEventReference总是被内部类 System.Web.UI.Util.QuoteJScriptString方法编码为字符串。

于 2013-04-14T13:10:27.937 回答