从客户端获取ASP下拉列表中的ID

时间:2013-05-10 03:41:18

标签: javascript asp.net client-side

我想要做的是获取我的下拉列表中的一个,以便在另一个中的所选项目发生变化时更改其内容。我在我的aspx文件中有这段代码:

function ModifyDDLItems(id1, id2) 
{
    var ddlcontrolShown = document.getElementById(id1);
    var ddlcontrolHidden = document.getElementById(id2);

    if (ddlcontrolShown.options[ddlcontrolShown.selectedIndex].value == "DD1") 
    {
        //Get number of items of hidden ddl
        var length = ddlcontrolHidden.options.length;

        //Clear items of shown ddl
        ddlcontrolShown.options.length = 0;

        //Add itmems of hidden ddl to shown ddl
        for (i = 0; i < length; i++) 
        {
            ddlcontrolShown.options.add
            var newoption = document.createElement("option")
            newoption.text = ddlcontrolHidden.options[i].text;
            newoption.value = ddlcontrolHidden.options[i].text.value;
        }         
    }   
}

现在,我通过这个给它前端ID:

protected void SetDD1ConfItems(GridViewRow gvRow, DataSet BaseConfItems)
{
    DataView dvConfType = new DataView(BaseConfItems.Tables[0]);
    DataSet dsTemp = BaseConfItems.Clone();

    DropDownList ddlConfType2 = (DropDownList)form1.FindControl("ddlConfType2");
    DropDownList ddlBA = (DropDownList)gvRow.FindControl("ddlBA");
    DropDownList ddlConfType = (DropDownList)gvRow.FindControl("ddlConfType");

    dvConfType.RowFilter = "ref_code = 'FAX' or ref_code = 'EEX' or ref_code = 'EPD'";

    dsTemp.Tables.Clear();
    dsTemp.Tables.Add(dvConfType.ToTable());

    ddlConfType2.DataSource = dsTemp;
    ddlConfType2.DataBind();
    //ddlBA.Attributes["onchange"] = "function GetDDLD(" + ddlConfType.ClientID + ", " + ddlConfType2.ClientID + ") {ModifyDDLItems(id1, id2);}";
    ddlBA.Attributes.Add("onchange", "ModifyDDLItems('" + ddlConfType.ClientID + "', '" + ddlConfType2.ClientID + "')");
}

当我运行它时,VS继续告诉我id1和id2都是null,似乎id没有正确地传递给客户端。

1 个答案:

答案 0 :(得分:0)

我认为你的代码错了,我一眼就看出的第一个错误是,

您无法使用

在gridview中找到控件
gvRow.FindControl("ddlBA");

GridView中可能有多行,因此您必须在每一行中找到您的控件,因为它们都将具有不同的ClientID。首先尝试替换以下代码

gvRow.Rows[RowIndex].FindControl("ControlID");

另外,它应该用某种循环编写,以便找到Grid的RowIndex值。

简要描述您的确切要求。所以,我可以帮助你编写正确的代码。