0

所以我已经为此苦苦挣扎了几天。我有一个登录页面,它检查用户是否是第一次登录,如果是,它会显示一个 jqueryui 对话框,要求用户选择他们的安全问题。对话框很简单,三个下拉菜单、三个文本框以及一个继续和取消按钮。对话框显示查找,当您单击继续时,数据将保存到数据库中,但它只保存下拉列表的默认值,而不保存文本框中的文本。在我看来,表格在数据保存之前回发,然后保存空白/默认内容。我已经尝试了所有可以在互联网上找到的方法来解决这个问题。截至目前,我正在启动页面加载对话框以进行测试。下面的代码:

Javascript:

function validateQuestions() {

            var q1Index = $('#<%= ddlQuest1.ClientID%>').get(0).selectedIndex;
            var q2Index = $('#<%= ddlQuest2.ClientID%>').get(0).selectedIndex;
            var q3Index = $('#<%= ddlQuest3.ClientID%>').get(0).selectedIndex;
            "<%=Q3Index%>" = q3Index;
            var label = document.getElementById('<%= _lblQuestError.ClientID%>');
            label.style.display = 'none';

            if (q1Index == q2Index || q1Index == q3Index || q2Index == q3Index) {label.style.display = 'block';}
            else {label.style.display = 'none'}
            return false;
        }

        function validateAnswers() {

            var ans1Text = $('#<%= txtAnswer1.ClientID%>').val();
            var ans2Text = $('#<%= txtAnswer2.ClientID%>').val();
            var ans3Text = $('#<%= txtAnswer3.ClientID%>').val();
            var ans1error = document.getElementById('<%= _lblAns1Error.ClientID%>');
            var ans2error = document.getElementById('<%= _lblAns2Error.ClientID%>');
            var ans3error = document.getElementById('<%= _lblAns3Error.ClientID%>');
            ans1error.style.display = 'none';
            ans2error.style.display = 'none';
            ans3error.style.display = 'none';

            if(ans1Text=""){ans1error.style.display = 'block';}                
            else if(ans2Text=""){ans2error.style.display = 'block';}
            else if(ans3Text=""){ans3error.style.display = 'block';}
            else { ans1error.style.display = 'none'; ans2error.style.display = 'none'; ans3error.style.display = 'none'}

            return false;
        }
function cancel() {
            $("#_dlgQuest").dialog('close');
            return false;
        }
function showDialog() {
            var secQuestDlg = $('#_dlgQuest').dialog({
                bgiframe: true,
                height: 350,
                width: 900,
                modal: true,
                overlay: {
                    backgroundColor: '#000',
                    opacity: ".8"
                }
            });
            secQuestDlg.parent().appendTo('/html/body/form[0]');
        }

按钮aspx:<asp:Button ID="_dlgbtnContinue" ToolTip="Continue" runat="server" Text="Continue" UseSubmitBehavior="false" OnClick="_dlgbtnContinue_Click" CausesValidation="false" />

页面加载:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddlQuest3.Attributes.Add("onchange", "javascript:validateQuestions();");
            ddlQuest1.Attributes.Add("onchange", "javascript:validateQuestions();");
            ddlQuest2.Attributes.Add("onchange", "javascript:validateQuestions();");
            txtAnswer1.Attributes.Add("onblur", "javascript:validateAnswers();");
            txtAnswer2.Attributes.Add("onblur", "javascript:validateAnswers();");
            txtAnswer3.Attributes.Add("onblur", "javascript:validateAnswers();");  
            List<String> lstQuestions = QuikDrawServiceHelper._QuikDrawClient.GetQuestions();               
            ddlCountry.Focus();
            FillQuestions();
            ClientScript.RegisterStartupScript(GetType(), "hwa", "showDialog()", true);
            }
    }

填写问题:

try
            {
                foreach (string s in lstQuestions)
                {
                    if (s.Equals(Customer.Quest1Code))
                    {
                        q1 = s;
                    }
                    if (s.Equals(Customer.Quest2Code))
                    {
                        q2 = s;
                    }
                    if (s.Equals(Customer.Quest3Code))
                    {
                        q3 = s;
                    }
                }
            }
            catch (Exception ex)
            {

            }

完成点击事件:

protected void _dlgbtnContinue_Click(object sender, EventArgs e)
        {  
            Customer = CompanyServiceHelper._CompanyClient.GetCustomerByID(Convert.ToInt32(Session["CustomerID"].ToString()));   
            if (Session["FirstLogin"] == "Yes")
            {
                Customer.Quest1Code = ddlQuest1.SelectedValue;
                Customer.Quest1Ans = txtAnswer1.Text;
                Customer.Quest2Code = ddlQuest2.SelectedValue;
                Customer.Quest2Ans = txtAnswer2.Text;
                Customer.Quest3Code = ddlQuest3.SelectedValue;
                Customer.Quest3Ans = txtAnswer3.Text;
                CompanyServiceHelper._CompanyClient.AddQuestionsForCustomer(Customer);
                Session["FirstLogin"] = "Yes";
                Session["CustID"] = Customer.CustID;                
    }

我也尝试过链接按钮,我得到了同样的结果。任何帮助将不胜感激。

4

2 回答 2

2

您面临的问题的根本原因是当弹出窗口消失时对话框变为“显示:无”,这会重置对话框中的所有值,使它们无法在服务器上访问。尽管“runat=server”,但在“display:none”的服务器 bcz 上无法访问表单字段,让您认为这些值从未设置!

于 2012-12-08T06:26:06.840 回答
0

似乎当您单击dlgbtnContinue按钮时它仍然没有进行回发,因此您完成了!isPostBack所有操作,然后重置了值。在此之后,_dlgbtnContinue_Click事件被触发,保存空白值。也许尝试检查!isPostBackDropDown 中的值是否也不是默认值,这意味着如果它们不是默认值,您不想再次进入该值。_dlgbtnContinue_Click只是一个想法......拥有代码会很好。祝你好运。

于 2012-06-29T21:58:49.800 回答