【问题标题】:ASP.NET - Set DropDownList's value and text attributes using JSASP.NET - 使用 JS 设置 DropDownList 的值和文本属性
【发布时间】:2019-02-20 12:47:15
【问题描述】:

我的 ASCX 页面之一中有一个下拉列表控件。

<asp:DropDownList ID="demoddl" runat="server" onchange="apply(this.options[this.selectedIndex].value,event)" onclick="borderColorChange(this.id, 'Click')" onblur="borderColorChange(this.id)" CssClass="dropDownBox" DataTextField="EmpName" DataValueField="EmpID">

我的目标是用“EmpID”作为值属性和“EmpName”作为文本属性填充这个下拉列表。

获取这些 'EmpName' 和 'EmpID' 值的 JS 代码如下:

$(document).ready(function () 
{
loadSavedFreeTextSearchCombo();
}


function loadSavedFreeTextSearchCombo() {

    var params = {
        loginID: $('#loginID').val()
    };

    var paramsJSON = $.toJSON(params);

    $.ajax({
        type: "POST",
        url: _WebRoot() + "/Ajax/EmpDetails.asmx/GetEmp",
        data: paramsJSON,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            $('#demoddl').empty();
            $('#demoddl').append($("<option></option>").val(0).html("--Employee Names --"));
            $.each(data.d, function (index, value) {
                $('#demoddl').append($("<option></option>").val(value.EmpID).html(value.EmpName));
            });

        },
        error: function () {
            showError("Failed to load Saved Search Data!");

        }
    });

}

虽然整个代码运行没有任何错误(EmpDetails.asmx 方法成功返回有效数据),但 dropdwonlist 没有填充返回的所需数据。

我做错了什么?我猜我的“成功”事件代码有问题

【问题讨论】:

    标签: javascript html asp.net ajax


    【解决方案1】:

    由于您打算使用DropDownList 服务器控件ID 作为选择器,因此必须设置ClientIDMode="Static",尤其是在您使用&lt;asp:ContentPlaceHolder&gt;&lt;asp:Content&gt; 时,以防止ASPX 引擎创建&lt;select&gt; 元素id 属性包含下拉菜单的占位符名称:

    <asp:DropDownList ID="demoddl" runat="server" ClientIDMode="Static"
                      onchange="apply(this.options[this.selectedIndex].value,event)"
                      onclick="borderColorChange(this.id, 'Click')"
                      onblur="borderColorChange(this.id)" 
                      CssClass="dropDownBox" DataTextField="EmpName" DataValueField="EmpID">
    

    如果由于某些原因(例如avoiding multiple &lt;select&gt; elements with same ID)不能使用ClientIDMode="Static" 属性,请使用控件的ClientID 属性作为选择器,即&lt;%= demoddl.ClientID %&gt;

    $.ajax({
        type: "POST",
        url: _WebRoot() + "/Ajax/EmpDetails.asmx/GetEmp",
        data: paramsJSON,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            $('#<%= demoddl.ClientID %>').empty();
            $('#<%= demoddl.ClientID %>').append($("<option></option>").val(0).html("--Employee Names --"));
    
            // recommended to check against undefined here
            $.each(data.d, function (index, value) {
                $('#<%= demoddl.ClientID %>').append($("<option></option>").val(value.EmpID).html(value.EmpName));
            });
    
        },
        error: function () {
            showError("Failed to load Saved Search Data!");
        }
    });
    

    【讨论】:

    • 感谢@Tetsuya Yamamoto。添加“ClientIDMode”属性有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多