none
ChangePassword控制項endingMail事件的程式碼被指出"使用者程式碼未處理 NullReferenceException" RRS feed

  • 問題

  • 大家好, 我用VS2008照著書上在練習ChangePassword控制項, 讓它寄E-mail

    在ChangePassword1的方法名稱SendingMail事件中, 有一行程式

    Str = CType(ChangePassword1.FindControl("newpassword"), TextBox).Text

    在偵錯時, 被指出下列訊息

    使用者程式碼未處理 NullReferenceException

    並未將物件參考設定為物件的執行個體

    請問是哪裡錯了嗎? 謝謝指教

    2011年2月6日 下午 02:56

解答

  • 謝謝指教

    大小寫是應該改, 已改成..ChangePassword1.FindControl("NewPassword")

    改過之後仍然會發生錯誤

    ChangePassword1.FindControl("NewPassword")的型態似乎是System.Web.UI.WebControls,

    試過AAA=ChangePassword1.FindControl("NewPassword")會發生錯誤, 另請教應如何看到其中的值呢?

    不好意思, 因為是初學, 敬請包涵指教, 謝謝

    經過測試發現ChangePassword控制項轉成樣板之後,會內含兩個Container,ID分別

    ChangePasswordContainerID和SuccessContainerID,其中您所提到的NewPassword控制項是放在

    ChangePasswordContainerID裡面,所以要先找到ChangePasswordContainerID控制項之後再去找NewPassword

    才可以順利取得新密碼。

     Dim NewPassword As TextBox = CType(ChangePassword1.FindControl("ChangePasswordContainerID").FindControl("newpassword"), TextBox)
    If NewPassword IsNot Nothing Then
     Response.Write(NewPassword.Text)
    End If
    

    其實除非您需要客製化ChangePassword控制項,否則在不轉成樣板的情況下,只要以下列程式碼就可以取得新密碼。

    Response.Write(ChangePassword1.NewPassword)

     


    http://www.dotblogs.com.tw/terrychuang/
    2011年2月7日 上午 07:09

所有回覆

  • 先確定你是不是真的有個TextBox叫做newpassword
    2011年2月7日 上午 02:06
    版主
  • 有的, 在changepassword1裡, 如果轉換為樣板後就可以看到, 謝謝指教, 敬請提供建議.

     

    2011年2月7日 上午 04:04
  • 您可以在偵錯模式中,下中斷點跟監看式去看

    ChangePassword1.FindControl("newpassword")

    的值是什麼。

    另外,您有確定大小寫是對的嘛?

    可以參考一下:http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.changepassword.changepasswordtemplate.aspx?appId=Dev10IDEF1&l=ZH-TW&k=k(SYSTEM.WEB.SECURITY.MEMBERSHIP);k(TargetFrameworkMoniker-

    先試著把大小寫改成跟參考範例一樣試試看。


    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    2011年2月7日 上午 04:15
    版主
  • 大家好, 我用VS2008照著書上在練習ChangePassword控制項, 讓它寄E-mail

    在ChangePassword1的方法名稱SendingMail事件中, 有一行程式

    Str = CType(ChangePassword1.FindControl("newpassword"), TextBox).Text

    在偵錯時, 被指出下列訊息

    使用者程式碼未處理 NullReferenceException

    並未將物件參考設定為物件的執行個體

    請問是哪裡錯了嗎? 謝謝指教

    可以嘗試修改成下列寫法,確認是否有newpassword的執行個體,可以更容易找到問題點。

    Dim newpassword As TextBox = CType(ChangePassword1.FindControl("newpassword"), TextBox)
    If newpassword IsNot Nothing Then
      Str = newpassword.Text
    Else
      Response.Write("newpassword not found.")
    End If
    


    http://www.dotblogs.com.tw/terrychuang/
    2011年2月7日 上午 06:09
  • 謝謝指教

    大小寫是應該改, 已改成..ChangePassword1.FindControl("NewPassword")

    改過之後仍然會發生錯誤

    ChangePassword1.FindControl("NewPassword")的型態似乎是System.Web.UI.WebControls,

    試過AAA=ChangePassword1.FindControl("NewPassword")會發生錯誤, 另請教應如何看到其中的值呢?

    不好意思, 因為是初學, 敬請包涵指教, 謝謝

    2011年2月7日 上午 06:44
  • 謝謝指教

    大小寫是應該改, 已改成..ChangePassword1.FindControl("NewPassword")

    改過之後仍然會發生錯誤

    ChangePassword1.FindControl("NewPassword")的型態似乎是System.Web.UI.WebControls,

    試過AAA=ChangePassword1.FindControl("NewPassword")會發生錯誤, 另請教應如何看到其中的值呢?

    不好意思, 因為是初學, 敬請包涵指教, 謝謝

    經過測試發現ChangePassword控制項轉成樣板之後,會內含兩個Container,ID分別

    ChangePasswordContainerID和SuccessContainerID,其中您所提到的NewPassword控制項是放在

    ChangePasswordContainerID裡面,所以要先找到ChangePasswordContainerID控制項之後再去找NewPassword

    才可以順利取得新密碼。

     Dim NewPassword As TextBox = CType(ChangePassword1.FindControl("ChangePasswordContainerID").FindControl("newpassword"), TextBox)
    If NewPassword IsNot Nothing Then
     Response.Write(NewPassword.Text)
    End If
    

    其實除非您需要客製化ChangePassword控制項,否則在不轉成樣板的情況下,只要以下列程式碼就可以取得新密碼。

    Response.Write(ChangePassword1.NewPassword)

     


    http://www.dotblogs.com.tw/terrychuang/
    2011年2月7日 上午 07:09
  • 感謝前輩, 問題解決了

    我改成  CType(ChangePassword1.FindControl("ChangePasswordContainerID").FindControl("newpassword"), TextBox).Text

    就不會有問題了, 大大感謝, 謝謝

     

    2011年2月7日 下午 03:00
  • 哪本書?
    請關心你的發問 ^_^
    2011年2月8日 上午 03:26