【问题标题】:How to get value of dropdown in javascript when it is in update panel当它在更新面板中时如何在javascript中获取下拉列表的值
【发布时间】:2012-05-25 01:14:27
【问题描述】:

我只在ddlCountryselectedindechanged 事件上绑定ddlstateddlState 在 javascript 中检查下拉值是否为“-1”,然后生成警报。当我检查 javascript 中的值时,它会显示一个空白值“”。当我将Postbacktrigger 用于ddlState 时,我可以使用javascript 获取值,但是使用async 的页面的平滑度要优于Postbacktrigger。这就是我使用异步触发器的原因。我的主要问题是ddlState 的值在我使用异步触发器时没有进入 javascript,而我可以使用回发触发器获取它。

JavaScript 验证:

function validateForm()
{
    var ddlCountry = document.getElementById('<%=ddlCountry.ClientID%>');
    var ddlState = document.getElementById('<%=ddlState.ClientID%>');
    if (ddlCountry .value == "-1")
    {
        alert("Country  should not be blank.");
        ddlCountry .focus();
        return false;
    }
    if (ddlState .value == "-1")
    {
        alert("State should not be blank.");
        ddlState .focus();
        return false;
    }

    return true;
}

ASPX 代码:

<asp:DropDownList ID="ddlAcqModalityList" runat="server" CssClass="csstextbox" Width="207px" AutoPostBack="true" OnSelectedIndexChanged="ddlAcqModalityList_SelectedIndexChanged">
</asp:DropDownList>
<asp:UpdatePanel ID="updatePanelState" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="ddlState " runat="server" CssClass="csstextbox" Width="177px">
        </asp:DropDownList>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlCountry" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnSave" runat="server" Width="80px" OnClientClick="return validateForm();" Text="Save" CssClass="cssbutton" OnClick="btnSave_Click" />

代码背后:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        BindCountry()
        {
            strSQL = @"SELECT Country_ID,Country_Desc
                       FROM Country_Master";

            DataTable dataTableState = null;
            dataTableState = objSqlDbComm.ExecuteDatasetQuery(strSQL).Tables[0];

            var dictioneryCountry = new Dictionary<int, string>();
            foreach(DataRow dr in dataTableStudy.Rows)
            {
                dictioneryCountry .Add(Convert.ToInt32(dr["Country_ID"]), dr["Country_Desc"].ToString());
            }

            ddlCountry.DataTextField = "Value";
            ddlCountry.DataValueField = "Key";
            ddlCountry.DataSource = dictioneryCountry;
            ddlCountry.DataBind();
            ddlCountry.Items.Insert(0, new ListItem("[Select]", "-1"));
            ddlCountry.Items[0].Selected = true;
        }
    }
}

protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
    int countryID = Convert.ToInt32(ddlCountry.SelectedItem.Value);

    ifcountryID == -1)
    {
        return;
    }

    strSQL = @"SELECT State_ID,State_Desc
               FROM State_Master
               WHERE countryID = '" + countryID + @"';

    DataTable dataTableState = null;
    dataTableState = objSqlDbComm.ExecuteDatasetQuery(strSQL).Tables[0];

    var dictioneryState = new Dictionary<int, string>();
    foreach(DataRow dr in dataTableStudy.Rows)
    {
        dictioneryState .Add(Convert.ToInt32(dr["State_ID"]), dr["State_Desc"].ToString());
    }

    ddlState.DataTextField = "Value";
    ddlState.DataValueField = "Key";
    ddlState.DataSource = dictioneryState;
    ddlState.DataBind();
    ddlState.Items.Insert(0, new ListItem("[Select]", "-1"));
    ddlState.Items[0].Selected = true;
}

【问题讨论】:

    标签: c# javascript asp.net updatepanel


    【解决方案1】:

    首先我认为你不能直接调用“ddlCountry.value”,那个id是用于服务器控制的!您需要使用,来获取客户端 ID。

    document.getElementById('ddlCountry').value;
    

    如果您想在更改下拉列表时在 javascript 上触发事件,您可以像这样添加 onchange 客户端事件,这将调用 javascript 函数而不发布页面(刷新):

    <asp:DropDownList ID="ddlState " runat="server" 
    CssClass="csstextbox" Width="177px" onchange="validateForm()">
    

    然后您可以根据需要删除事件触发器和更新面板。

    希望对你有帮助。

    【讨论】:

    • DivHenr:在更改 ddlCountry 时,我必须异步填写 ddlState...并在按钮上单击验证两个 ddl...ddlState 是否在更新面板中,为什么当我在 javascript 中访问我的 ddlstate 值时它得到空白值......但 ddl 国家验证得到正确的方式
    • im 仅绑定 ddlCountry 的 selectedindechanged 事件.....ddlState 下拉值在 javascript 中检查,如果它是“-1”,然后生成警报..当我在 javascript 中检查值时,它向我显示空白值“” ...但是当我使用 Postbacktrigger 的 ddlState 值在 javascript 中获取并且所有工作都很好...但是使用异步的页面的平滑度比 Postbacktrigger 更好...您使用异步触发器...我的主要问题是当我使用异步触发器但使用回发触发器值时,ddlState 值没有进入 javascript ......
    • "关于改变 ddlCountry 我必须异步填写 ddlState",不,你可以正常填写,试试这个用项目填充下拉菜单并添加 onchange="somefunc()",当您更改触发 javascript 事件的下拉列表。该值为空,因为更新面板中的控件更改了 id,从浏览器中查看 html,您将看到 id 已更改为 updatepanel_ddlState 之类的内容。
    • id of ddlstate is::contentPlaceHolderMain_ddlState .....我已经检查过使用此 id 但收到错误 contentPlaceHolderMain_ddlState is undefined..
    • 我没明白你想解释什么
    【解决方案2】:
            //javascript code
    var hidStateValue=document.getElementByID('<%=hidStateValue.ClientID%>');
            if (hidStateValue.value == "-1")
                        {
                            alert("State should not be blank.");                
                            return false;
                        }
    
            //aspx code
            <asp:DropDownList ID="ddlState" AutoPostBack="true"  runat="server" CssClass="csstextbox" Width="177px" onselectedindexchanged="ddlState_SelectedIndexChanged">                                                                </asp:DropDownList>
                <asp:HiddenField ID="hidStateValue" runat="server" />
    
            //Code behind
    
              protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
             {
                //code
                hidStateValue.Value = ddlState.SelectedItem.Value;
             }
            protected void ddlState_SelectedIndexChanged(object sender, EventArgs e)
                {       
                    hidStateValue.Value="";
                    hidStateValue.Value = ddlState.SelectedItem.Value;      
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      相关资源
      最近更新 更多