You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Page_Load,避免Owner下拉框回发时执行loadOtherSpecimenType

解决方案:通过判断回发触发源跳过指定方法执行

我完全明白你的困扰——每次切换Owner下拉框触发回发时,Page_Load里的loadOtherSpecimenType()也会跟着执行,而你又没法修改ddlOwner_SelectedIndexChanged方法。别担心,咱们可以利用ASP.NET回发机制里的隐藏字段来精准控制方法的执行时机。

核心思路

ASP.NET在触发回发时,会把引发回发的控件ID存储在__EVENTTARGET这个表单字段里。我们只需要在Page_Load的回发分支中,检查这个字段的值是否来自ddlOwner:如果是,就跳过loadOtherSpecimenType()的执行;否则正常执行。

修改后的Page_Load代码

下面是调整后的Page_Load方法,我标注了新增的关键判断逻辑:

protected void Page_Load(object sender, EventArgs e) {
    //Some code here
    if (IsPostBack) {
        Console.WriteLine("");
        
        // 新增:判断回发是否由ddlOwner触发
        string eventTarget = Request.Form["__EVENTTARGET"];
        // 用UniqueID确保获取到控件的完整ID(避免容器控件导致的ID前缀问题)
        if (!string.Equals(eventTarget, ddlOwner.UniqueID, StringComparison.Ordinal)) {
            loadOtherSpecimenType();
        }
        
        Console.WriteLine("");
    }
    if (!IsPostBack) {
        /* If (guuest){ load textboxes for DVM, Billing Owner, Copty To } else { //code below */
        getDdlDVM();
        getDdlBillTo();
        getDdlCopyTo();
        getDdlOwner();
        getDdlSpecies();
        var referer1 = HttpContext.Current.Request.UrlReferrer;
    }
}

为什么这样有效?

当你选择ddlOwner的选项触发回发时,Request.Form["__EVENTTARGET"]的值会等于ddlOwner的UniqueID(如果控件在NamingContainer里,比如MasterPage或UserControl,这个ID会自动包含前缀,用UniqueID能确保匹配准确)。通过对比这个值,我们就能精准判断是否要跳过loadOtherSpecimenType()的执行。

这个方法不需要修改ddlOwner_SelectedIndexChanged方法,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Shivali Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:29:24