我收到 InvalidCastException 异常

I'm getting an exception of InvalidCastException

我想从上一页获取 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; 为什么?

好的,在查看您的代码后,您似乎想要获取按钮 ID,以便您可以基于该 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;
}

这将 return 您可以进一步深入研究的 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();
            }        
        }
}

希望你觉得有用。