0

ですから、私はこれに数日間苦労しています。ユーザーが初めてログインしているかどうかを確認するログインページがあります。ログインしている場合は、セキュリティの質問を選択するようにユーザーに求めるjqueryuiダイアログボックスが表示されます。ダイアログはシンプルで、3つのドロップダウン、3つのテキストボックス、および続行とキャンセルのボタンがあります。ダイアログに検索が表示され、[続行]をクリックすると、データがデータベースに保存されますが、ドロップダウンリストのデフォルト値のみが保存され、テキストボックスからのテキストは保存されません。データが保存される前にフォームがポストバックされ、空白/デフォルトのコンテンツが保存されているように見えます。私はこれを修正するためにインターネット上で見つけることができるすべてを試しました。現在、テスト目的でページの読み込み時にダイアログボックスを起動しています。以下のコード:

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" />

PageLoad:

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

直面している問題の根本的な原因は、ポップアップが消えたときにダイアログが「display:none」になり、これによりダイアログ内のすべての値がリセットされ、サーバーからアクセスできなくなることです。「runat=server」にもかかわらず、「display:none」のサーバーbczではフォームフィールドにアクセスできないため、値が設定されていないように思われます。

于 2012-12-08T06:26:06.840 に答える
0

ボタンをクリックしdlgbtnContinueてもまだポストバックが行われていないようです。そのため、!isPostBackすべてを取得してから値をリセットします。この後、_dlgbtnContinue_Clickイベントがトリガーされ、空白の値が保存されます。たぶん!isPostBack、DropDownの値もデフォルトではないかどうかをチェックインしてみてください。つまり、デフォルト値でない場合は、再度その中に入れたくないということです。_dlgbtnContinue_Clickただのアイデア...コードがあるといいでしょう。幸運を。

于 2012-06-29T21:58:49.800 に答える