4

我的客户端有一个文本框和一个下拉列表。我需要使用 javascript 将这些控件的值传递给 webmethod(在后面的代码中)。我可以传递文本框值,但不能传递下拉列表。

<p><asp:DropDownList id="ddlList" runat="server"></asp:DropDownList></p>
<p><asp:TextBox ID="txtSearch" runat="server"  OnTextChanged="txtSearch_TextChanged"    OnKeyPress="onKeyFunction();" AutoPostBack="True"></asp:TextBox>
<asp:GridView ID="grdLista" runat="server"></asp:GridView>

<script type="text/javascript">
    function onKeyFunction() {
        var search = document.getElementById('<%=txtSearch.ClientID %>').value;
        //var ddl = i need to pass the dropdownlist values here..
        PageMethods.callJS(search, /*ddl */, onSucess, onError);

        function onSucess(result) {
            alert(result);
        }

        function onError(result) {
            alert('Something wrong.');
        }
    }
</script>

这是我的 WebMethod 中的代码

[WebMethod]            
public static IEnumerable<string> callJS(string search)
{
    IEnumerable<string> results = itemList.Where(item => item.Contains(search.ToLower()));
    return (results);
}
4

2 回答 2

2

您可以像这样获取 DDL 的值:

var liste =  document.getElementById('#ddlList');
var ddl = liste.options[liste.selectedIndex].value;

编辑 :

为了从 DDL 中检索所有值,我们必须遍历选项值:

var ddl = [];
for(var i = 0; i<3; i++) {
    ddl.push(document.getElementById("<%=ddlList.ClientID %>").options[i].value);
}

这个数组可以在服务器端作为List<string>

[WebMethod()]
public static IEnumerable<string> callJS(List<string> ddl) { ... }
于 2012-12-03T16:02:51.743 回答
0

不清楚在 page 方法中何处使用了 ddl 值。也许你还没有写那部分。作为建议,您可以将所有值作为逗号分隔的字符串传递。或作为一个数组。

使用 Jquery 可以这样取值:

function getDropDownList() {
        var $ddl = $('#' + 'ctl00_ContentPlaceHolder1_ddlList');
        var $array = []
        $ddl.children('option').each(function () {
            $array.push($(this)[0].value);

        })
        //return $array you can return the value here as an array;
 //return $array.join(',') or as a string;

        try {
            PageMethods.callJS(search,$array, success, failure);
        }
        catch (e) {
            alert('error');
        }

}

页面方法签名将需要更改。

[WebMethod]            
public static IEnumerable<string> callJS(string search, string[] ddlList)
    {



        IEnumerable<string> results = itemList.Where(item => item.Contains(search.ToLower()));
        return (results);
    }

希望这可以帮助。

于 2012-12-03T17:06:29.553 回答