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[] {','});

请告知我哪里错了。我搜索了各种答案,但无法确定我错在哪里。

4

2 回答 2

2

Request.Form[txtSeatNo.ClientID]显然是空的。通常,如果未定义给定键, NameValueCollection(like ) 将返回空字符串。Request.Form

你应该做一个检查:

string seatString = Request.Form[txtSeatNo.ClientID];
string [] seats = String.IsNullOrEmpty(seatString) ? new char[]{} :
     seatString.Split(new char[] {','});
于 2012-05-23T02:35:09.177 回答
0

NullReferenceException 是一个非常令人头疼的异常。即使您可以通过查看堆栈跟踪知道发生异常的行。但它也可能包括不止一种可能性。

你的案例就是一个例子。

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

实际上在这一行中,有 2 个地方会导致 null 异常。他们是:

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

通常第二个是最可能的。

所以最好多行编写代码,并在使用前检查值。我认为 Jacob Abrahams 举了一个很好的例子。

于 2012-05-23T07:05:20.190 回答