当用户导航到新页面时,此ddl的选定索引由cookie确定,但如果ddl不包含该cookie的值,那么我希望将其设置为0.我将采用什么方法用于ddl?循环是最好的方法,还是我可以执行简单的if语句?
这是我尝试过的,但它不会返回一个bool。
if ( !ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString() ) )
ddlCustomerNumber.SelectedIndex = 0;
答案 0 :(得分:117)
有两种方法可以想到:
你可以使用像这样的包含:
if (ddlCustomerNumber.Items.Contains(new
ListItem(GetCustomerNumberCookie().ToString())))
{
// ... code here
}
或修改您当前的策略:
if (ddlCustomerNumber.Items.FindByText(
GetCustomerNumberCookie().ToString()) != null)
{
// ... code here
}
编辑:还有一个DropDownList.Items.FindByValue
与FindByText的工作方式相同,只不过它会根据值进行搜索。
答案 1 :(得分:9)
这将返回一个项目。只需更改为:
if (ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()) != null)
ddlCustomerNumber.SelectedIndex = 0;
答案 2 :(得分:5)
如果0是您的默认值,您只需使用简单的赋值:
ddlCustomerNumber.SelectedValue = GetCustomerNumberCookie().ToString();
如果DDL包含cookie的值,则会自动选择正确的列表项。如果它不包含它,则此调用不会更改选择,因此它将保持默认选择。如果后者与值0相同,那么它就是您的完美解决方案。
我使用这种机制非常方便,并且非常方便。
答案 3 :(得分:1)
这个怎么样:
ListItem match = ddlCustomerNumber.Items.FindByText(
GetCustomerNumberCookie().ToString());
if (match == null)
ddlCustomerNumber.SelectedIndex = 0;
//else
// match.Selected = true; // you'll probably select that cookie value
答案 4 :(得分:1)
APE_F
答案 5 :(得分:0)
您可以尝试检查此方法是否返回null:
if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null)
ddlCustomerNumber.SelectedIndex = 0;
答案 6 :(得分:0)
在C#上有效:
if (DDLAlmacen.Items.Count > 0)
{
if (DDLAlmacen.Items.FindByValue("AlmacenDefectoAndes").Value == "AlmacenDefectoAndes")
{
DDLAlmacen.SelectedValue = "AlmacenDefectoAndes";
}
}
<强>更新强>
将上面的代码翻译为Visual Basic不起作用。它抛出“System.NullReferenceException:对象引用未设置为对象的实例..”
因此。为了在Visual Basic上工作,我不得不改变这样的代码:
If DDLAlmacen.Items.Count > 0 Then
If DDLAlmacen.Items.Contains(New ListItem("AlmacenDefectoAndes")) Then
DDLAlmacen.SelectedValue = "AlmacenDefectoAndes"
End If
End If
答案 7 :(得分:0)
//你可以用吗?运算符而不是if
ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0";
答案 8 :(得分:0)
如果函数返回Nothing,您可以尝试以下
if (ddlCustomerNumber.Items.FindByText(
GetCustomerNumberCookie().ToString()) != Nothing)
{
...
}
答案 9 :(得分:0)
有时,该值需要修剪空白或不匹配,在这种情况下,可以使用此附加步骤(source):
if(((DropDownList) myControl1).Items.Cast<ListItem>().Select(i => i.Value.Trim() == ctrl.value.Trim()).FirstOrDefault() != null){}