正在为DataBound DropDownList中的空白/默认ListItem禁用PostBack

本文关键字:默认 ListItem 禁用 PostBack 空白 DataBound DropDownList | 更新日期: 2023-09-27 18:00:59

我有一个从数据源填充的DropDownList。绑定后,我将一个空字段放在列表的顶部,这样用户就可以看到它是空白的(创建一种"默认项"(。我有一些处理SelectedIndexChanged事件的代码,但如果用户要选择空的ListItem,则不需要执行它。

这是我的代码:

.aspx

<asp:DropDownList ID="dropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="dropDownList_SelectedIndexChanged">
</asp:DropDownList>  

C#代码隐藏添加空白ListItem

dropDownList.Items.Insert(0, new ListItem(String.Empty, String.Empty));
dropDownList.SelectedIndex = 0;

由于当用户仅单击此特定索引时,我不需要该页面进行回发,因此我希望完全禁用此列表项的回发。这可能吗?如果是,如何?

正在为DataBound DropDownList中的空白/默认ListItem禁用PostBack

设置disabled="disabled",这将使项目不可选择(并且不进行回发(

<asp:DropDownList runat="server" ID="dddl">
    <asp:ListItem Text="" disabled="disabled" Selected="True"></asp:ListItem>
    <asp:ListItem Text="test"></asp:ListItem>
</asp:DropDownList>

或者,如果您希望能够选择第一个(空(项目但不进行回发,请执行以下操作:

<asp:DropDownList runat="server" ID="dddl" AutoPostBack="true" onchange="if(this.selectedIndex == 0)return false;">
    <asp:ListItem Text="" Selected="True"></asp:ListItem>
    <asp:ListItem Text="test"></asp:ListItem>
</asp:DropDownList>

您可以添加一个必需的字段验证器。然后将DropDownList的CausesValidation属性设置为true。这将防止回发,并为最终用户提供反馈。

    <asp:DropDownList ID="dropDownList" runat="server" AutoPostBack="true"  OnSelectedIndexChanged="dropDownList_SelectedIndexChanged" CausesValidation="true">
    </asp:DropDownList>
    <asp:RequiredFieldValidator ID="rfvDropDownList" runat="server" ErrorMessage="Must select a value!" ControlToValidate="dropDownList" />

你能添加一个onChange属性来运行一个JS函数吗?该函数在返回之前检查值是否为空?

dropDownList.Attributes.Add("onChange", "javascript: return ddlChange()");
function ddlChange
{
    if(document.getElementById("<%= dropDownList.ClientID %>").value == "")
        return false;
    return true;
}

1.web控件使用回发,添加属性取消回发。但选项将不会被选择。

protected void rblRecentOrder_DataBound(object sender, EventArgs e)
{
    RadioButtonList rbl = sender as RadioButtonList;
    ListItem itemX = rbl.Items.FindByText("NA");
    // if no NA item then add it
    if (itemX == null)
    {
       itemX = new ListItem("NA");
       // set item cancel postback, but option will not be selected
       itemX.Attributes.Add("onclick", "return false;");
    }
}

2.或在需要时使用javacscript调用回发

<script>
function myPostback() {
     // call asp.net postback
     __doPostBack('tagName', 'params');
}
// TextBox
function updateValue(id, value) {
    let obj = document.getElementById(id);
    obj.value = value;
}
// Label
function updateInnerHTML(id, value) {
    var obj = document.getElementById(id);
    obj.innerHTML = value;
}
// DrowdownList
function setSelectOption(id, value) {
    let obj = document.getElementById(id);
    if (obj)
        obj.value = value;
}
// RadioButtonList
function selectRadio(id) {
    let obj = document.getElementById(id);
    // input type=radio
    if (obj) {
        let items = obj.getElementsByTagName("INPUT");
        for (var i = 0; i < items.length; i++) {
            items[i].checked = true;
        }
    }
}
</script>
c#
switch(Request.Form["__EVENTTARGET"])
{
    case "tageName":
        var params = Request.Form["__EVENTARGUMENT"];
        //..........
        break;
}