ในระหว่างกระบวนการพัฒนาหน้าเว็บไซต์ ASP.NET 2.0 มักจำเป็นต้องตั้งค่า SelectedValue ของตัวควบคุมรายการ เช่น DropDownList เป็นค่าที่อ่านจากฐานข้อมูลหรือที่อื่นๆ
วิธีที่ง่ายที่สุดคือระบุโดยตรง:
DropDownList1.SelectedValue = "จีน";
แต่บางครั้งหากไม่มีรายการ "จีน" ใน DropDownList1 ข้อยกเว้นจะเกิดขึ้นในการมอบหมาย:
รายละเอียดข้อยกเว้น: System.ArgumentOutOfRangeException: "DropDownList1" มีค่า SelectedValue ที่ไม่ถูกต้องเนื่องจากไม่อยู่ในรายการสินค้า
สิ่งที่คุณต้องการบรรลุ: หากค่าที่ระบุไม่อยู่ในรายการ อย่าตั้งค่ารายการที่เลือกและอย่าโยนข้อยกเว้น
ตรวจสอบ MSDN:
คุณสมบัติ SelectedValue ยังสามารถใช้เพื่อเลือกรายการในตัวควบคุมรายการโดยการตั้งค่าคุณสมบัติด้วยค่าของรายการ ถ้ารายการใดๆ ในตัวควบคุมรายการไม่มีค่าที่ระบุ System.ArgumentOutOfRangeException จะถูกส่งออกไป
แต่สิ่งที่แปลกก็คือการมอบหมายงานดังกล่าวจะไม่ผิดพลาดในกรณีส่วนใหญ่ แต่บางครั้งก็อาจผิดพลาดได้ ฉันตรวจสอบการใช้งาน SelectedValue ผ่านการไตร่ตรองและพบเหตุผล
สตริงเสมือนสาธารณะ SelectedValue
-
รับ
-
int num1 = this.SelectedIndex;
ถ้า (num1 >= 0)
-
กลับ this.Items[num1].Value;
-
กลับสตริงว่างเปล่า;
-
ชุด
-
ถ้า (this.Items.Count != 0)
-
ถ้า ((ค่า == null) || (base.DesignMode && (value.Length == 0)))
-
นี้.ClearSelection();
กลับ;
-
ListItem item1 = this.Items.FindByValue (ค่า);
ถ้า ((((this.Page != null) && this.Page.IsPostBack) && this._stateLoaded) && (item1 == null))
-
โยน ArgumentOutOfRangeException ใหม่ ("value", SR.GetString ("ListControl_SelectionOutOfRange", new object[] { this.ID, "SelectedValue" }));
-
ถ้า (item1 != null)
-
นี้.ClearSelection();
item1.Selected = จริง;
-
-
this.cachedSelectedValue = ค่า;
-
}
ปรากฎว่าข้อผิดพลาดในการมอบหมายเกิดขึ้นเมื่อเพจเป็น IsPostBack เท่านั้น
นอกจากนี้ ข้อยกเว้นจะเกิดขึ้นหากคุณเขียนดังนี้:
DropDownList1.Items.FindByValue("จีน").Selected = true;
ในที่สุดก็พบวิธีที่จะบรรลุข้อกำหนดข้างต้น:
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("จีน"));
นั่นคือ ถ้าไม่พบรายการที่ระบุผ่าน FindByValue รายการดังกล่าวจะเป็นโมฆะ และ Items.IndexOf(null) จะส่งกลับ -1
http://www.cnblogs.com/weizhuangzhi/archive/2006/12/13/591251.html