JavaScript в asp: Мастер - PullRequest
       5

JavaScript в asp: Мастер

1 голос
/ 24 января 2012

У меня есть wizardcontrol, где за один шаг пользователь может ввести свое имя, адрес электронной почты, номер телефона и т. Д.

Когда пользователь нажимает кнопку «Далее» мастера, я проверяю базу данныхчтобы узнать, существует ли существующая учетная запись с указанным номером телефона.

В этом случае система должна спросить пользователя, будет ли он связывать новую информацию с этим номером или он введетновый номер телефона.

Если он говорит, что связывает информацию, информация связывается, и мастер переходит к шагу 2, и если он вводит новый номер телефона, волшебник остается на шаге 1.

код выглядит примерно так:

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
    if (Wizard1.ActiveStepIndex == 0)
    {
        Page.Validate();
        if (Page.IsValid)
        {
            if (!Mobile_ValidateForExistingUsers(((TextBox)WizardStep1.ContentTemplateContainer.FindControl("txtPhone")).Text))
            {
        //JavaScript popup or something, which prompts the user?
            }
        }
    }
}

где валидатор:

protected bool Mobile_ValidateForExistingUsers(string usrPhone)
{
    bool IsValid = false;

    using (SqlConnection conn = new SqlConnection(connString))
    using (SqlCommand cmd = new SqlCommand("spCheckMobile", conn))
    {
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@Mobile", usrPhone));

        cmd.Connection.Open();

        object result = cmd.ExecuteScalar();

        if (result == null)
        {
            IsValid = true;
        }
    }
    return IsValid;
}

Как задать пользователю этот вопрос и либо продолжить, либо позволить ему ввести какую-то новую информацию в мастере

1 Ответ

0 голосов
/ 24 января 2012

Я думаю, что наиболее эффективный способ справиться с этим - сделать функцию Mobile_ValidateForExistingUsers(phoneNumber) WebMethod для вызова AJAX.После того, как вы напишите код AJAX, присоедините вызов AJAX к <asp:CustomValidator> для его функции проверки на стороне клиента, и если он вернет false, проследите за вашим window.alert('use new number').

. В качестве альтернативы, вы можете обрабатывать большинствоэто через код на стороне сервера с использованием <asp:CustomValidator>, хотя нет необходимости устанавливать функцию проверки на стороне клиента, если вы обрабатываете проверку на стороне сервера.Просто установите свойство CustomValidator1.IsValid для результатов функции Mobile_ValidateForExistingUsers(phoneNumber), а затем вызовите Page.Validate(), чтобы увидеть, является ли страница по-прежнему действительной.Если нет, пометьте runat="server" скрытый ввод и попросите некоторый код на стороне клиента предложить пользователю на window.onload, и если он хочет использовать новый номер, сохраните его во втором скрытом поле.Пример:

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
    if (Wizard1.ActiveStepIndex == 0)
    {
        Page.Validate();
        if (Page.IsValid)
        {
            if (HiddenField2.Value == '')   //Client-side Flag not set
            {
                if (!Mobile_ValidateForExistingUsers(((TextBox)WizardStep1.ContentTemplateContainer.FindControl("txtPhone")).Text))
                {
                    CustomValidator1.IsValid = false;   // Invalidate the page so the Next Step fails.
                    HiddenField1.Value = false;         // Page will get re-rendered to client to fix errors and stay on the same step.
                }
            }
            else
            {
                if (HiddenField2.Value == 'true')
                {
                    // Use new binding logic.
                }
                else
                {
                    //User does not want to use new number, so logic to handle goes here.
                }
            }

        }
    }
}

А затем где-нибудь в разметке на стороне клиента:

/*
 * Crude example
*/
<script type="text/javascript">
    window.onload = function () {
        'use strict';
        var hf1 = document.getElementById('<%=HiddenField1.ClientID %>');
        var hf2 = document.getElementById('<%=HiddenField2.ClientID %>');
        var myForm = document.getElementById('<%=Form1.ClientID %>');
        if (hf1.value === 'false') {    // or if (hf1.value) if you just want the truthiness of the value's existence (depending on how you flag stuff)
            hf2.value = window.confirm('Wanna use this number?').toString().toLowerCase();
        }
        myForm.submit();
    }
</script>

Надеюсь, это поможет,

Пит

...