2012-05-23 41 views
0

我有以下代碼:對象引用不設置爲與字符串數組的對象信息的實例

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    StarBusModel.BookingDetail1 objBooking = new StarBusModel.BookingDetail1(); 
    objBooking.TourID = tourID; 
    objBooking.Name = txtName.Text; 
    objBooking.Phone = txtPhone.Text; 
    objBooking.Amount = Convert.ToDecimal(Request.Form[txtAmount.ClientID]); 


    string [] seats = Request.Form[txtSeatNo.ClientID].Split(new char[] {','}); 
    for (int i = 0; i < seats.Length; i++) 
      objBooking.SeatDetails.Add(new StarBusModel.SeatDetail1() {SeatID = Convert.ToInt32(seats[i])}); 
    objEntities.BookingDetail1.AddObject(objBooking);   
    objEntities.SaveChanges(); 
    BindSeats(); 
} 

我得到錯誤

System.NullReferenceException: Object reference not set to an instance of an object.

在以下代碼:

string [] seats = Request.Form[txtSeatNo.ClientID].Split(new char[] {','}); 

請告知我錯在哪裏。我搜索了各種答案,但無法確定我錯在哪裏。

+0

此'Request.Form [txtSeatNo.ClientID]'可能會給你'null'? –

+0

在進行任何操作之前,對輸入表單值執行完整性檢查總是很好的做法。順便說一下,爲什麼你需要拆分txtSeatNo? – Turbot

+0

爲什麼你不能訪問txtAmount.Text和txtSeatNo.Text?爲什麼你需要使用表單集合獲得控制值? –

回答

2

Request.Form[txtSeatNo.ClientID]顯然是空的。通常,如果給定密鑰未定義,則NameValueCollection(如Request.Form)將返回空字符串。

你應該做一個檢查:

string seatString = Request.Form[txtSeatNo.ClientID]; 
string [] seats = String.IsNullOrEmpty(seatString) ? new char[]{} : 
    seatString.Split(new char[] {','}); 
+0

這幫助我追溯代碼並解決返回Request.Form [txtSeatNo.ClientID]的空值。非常感謝。 –

0

的NullReferenceException是一個很頭疼的錯誤時拋出。即使通過查看堆棧跟蹤您可以知道發生異常的行。但它也可能包含超過1種可能性。

你的情況就是一個例子。

string [] seats = Request.Form[txtSeatNo.ClientID].Split(new char[] {','}); 

其實在這一行中,有2個地方可能會導致null異常。它們是:

  1. txtSeatNo.ClientID
  2. 的Request.Form [txtSeatNo.ClientID]

一般情況下,第二個是最可能的。

因此,最好將代碼寫入多行並在使用之前檢查值。我認爲雅各布亞伯拉罕舉了一個很好的例子。

相關問題