我遇到了 InvalidCastException 异常

Posted

技术标签:

【中文标题】我遇到了 InvalidCastException 异常【英文标题】:I'm getting an exception of InvalidCastException 【发布时间】:2020-08-17 07:37:45 【问题描述】:

我想从上一页获取asp 按钮 ID,但遇到了异常。 这是我的C#代码

public partial class ADD_MOBILE : System.Web.UI.Page

        string BUTN_ID;
        protected void Page_Load(object sender, EventArgs e)
        
            Button button = (Button)sender;
            string BUTTON_CLICKER_ID = button.ID;
            BUTN_ID = BUTTON_CLICKER_ID;
        
        protected void saveMOBILE_Click(object sender, EventArgs e)
        
            if(BUTN_ID == "samsung") ...         
        

此时我遇到异常Button button = (Button)sender; 为什么?

【问题讨论】:

因为 Page_Load 事件中的 senderPage 对象而不是 Button docs.microsoft.com/en-us/previous-versions/6c3yckfw(v=vs.140). 【参考方案1】:

好的,在浏览完您的代码之后,您似乎想要获取按钮 ID,以便您可以根据它处理一些代码。好吧,让我澄清一下,页面加载事件永远不会为您提供导致发件人对象回发的控件,即使它在您单击按钮时被触发并回发,但它不会在发件人对象中包含该控件的信息把它发回来了。

为此,您可能想从James Johnson 的回答中使用这种方法来了解哪个控件导致回发:

/// <summary>
/// Retrieves the control that caused the postback.
/// </summary>
/// <param name="page"></param>
/// <returns></returns>
private Control GetControlThatCausedPostBack(Page page)

    //initialize a control and set it to null
    Control ctrl = null;

    //get the event target name and find the control
    string ctrlName = page.Request.Params.Get("__EVENTTARGET");
    if (!String.IsNullOrEmpty(ctrlName))
        ctrl = page.FindControl(ctrlName);

    //return the control to the calling method
    return ctrl;

这将返回您可以进一步深入研究的 Control 对象。

否则,在您的情况下,合适且简洁的方法是这样做:

public partial class ADD_MOBILE : System.Web.UI.Page

        string BUTN_ID; // I do not think it is necessary here.
        protected void Page_Load(object sender, EventArgs e)
        

        
        protected void saveMOBILE_Click(object sender, EventArgs e)
        
            Button button = (Button)sender;
            if(button is null) return; // you can use == instead of keyword 'is'

            if(button.ID.Equals("samsung"))
            
                 // DoStuff();
                    
        

希望对你有用。

【讨论】:

以上是关于我遇到了 InvalidCastException 异常的主要内容,如果未能解决你的问题,请参考以下文章

即使内容和代码最少,扩展 viewcell 的自定义控件也会引发 System.InvalidCastException

尝试检索数据时获取 invalidcastexception

System.InvalidCastException:指定的强制转换无效。错误

C# 转换枚举 InvalidCastException 错误

COM 互操作对象在一个项目中引发 InvalidCastException,但在其他项目中不引发

Xamarin 形式:System.InvalidCastException:'指定的转换无效