Javascript подтверждает проблему с сообщением - PullRequest
3 голосов
/ 09 февраля 2011

У меня есть всплывающее окно подтверждения, которое я могу показать, как показано ниже.

Но я не знаю, нажал ли пользователь «ОК» или «Отмена».

                ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirm('Do u wanna change?');</script>", false);

так что я хочу сделать вот так.

if (orignalId != newId)
                {
 ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirm('Do u wanna change?');</script>", false);

If (user clicks Yes)
{
add some data to SQL
}
else
{
return;
}
}

Как я знаю, что пользователь нажал ??

Я пробовал это

  1. Я поместил приведенный ниже код в файл folder1 \ jscrip.js, но я не знаю, как его вызвать, так как у меня на странице используется панель обновления ajax, поэтому я не могу использовать ClientScript.RegisterClientScriptInclude для ссылки на него. как указано в 6-м пункте по этой ссылке: http://www.dotnetcurry.com/ShowArticle.aspx?ID=274

Page.ClientScript.RegisterClientScriptInclude («выборочный», ResolveUrl (@ «folder1 \ jscrip.js»));

function confirmation()
{
if(confirm("Are you sure?")==true)
return true;
else
return false;
}

Есть предложения ??? Спасибо

функциональность:

поэтому пользователь нажимает кнопку с именем «Сначала сохранить» и проверяет условие «if (orignalId! = NewId)», если оно истинно, отображается поле подтверждения, иначе окно подтверждения не отображается ... теперь, если пользователь нажимает OK, некоторые значения вводятся в БД, иначе он просто возвращает и ничего не делает

дополнительный код:

protected void Page_Load(object sender, EventArgs e)
        {
if (!IsPostBack)
            {
            }
 else if (Label.Text != "")
            {
                Global.logger.Debug("Postback Happ, Label = " + Label.Text);
                Button2_Click(sender, e);
            }
        }

 protected void Button2_Click(object sender, EventArgs e)
        { if (orignalCsId != 0 && newCsId != 0)
                {
                    if (orignalId != newId)
                    {
                        Global.logger.Debug("Pop Up crossed1");
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", String.Format(CultureInfo.InvariantCulture, @"__doPostback('{0}', confirm('Your Data From iD1 will be populated in iD2?').toString());", Label.Text), true);
                    }
                    else if (Page.Request["__EVENTTARGET"] == Label.Text)
                    {
                        Global.logger.Debug("__EVENTARGUMENT1 = " + Page.Request["__EVENTARGUMENT"]);
                        bool userClickedOK = Boolean.Parse(Page.Request["__EVENTARGUMENT"]);
                        if (userClickedOK)
                        {
                            // Add some data to SQL.
                        }
                        else
                        {
                            return;
                        }
                        Label.Text = "";
                    }
                }
          }

Ответы [ 4 ]

3 голосов
/ 09 февраля 2011

Вы можете использовать скрытое поле, но вам все равно придется форсировать обратную передачу после того, как пользователь отклонит поле подтверждения.Так как вы в конечном итоге вызовете __ doPostBack () в любом случае, вы можете воспользоваться его вторым аргументом для отправки возвращаемого значения confirm() обратно на сервер без использования скрытого поля:

if (originalId != newId) {
    ScriptManager.RegisterStartupScript(this, GetType(), "ajax",
        String.Format(CultureInfo.InvariantCulture, @"
            __doPostBack('{0}', confirm('Are you sure?').toString());
        ", yourUpdatePanel.ClientID), true);
} else if (Page.Request["__EVENTTARGET"] == yourUpdatePanel.ClientID) {
    bool userClickedOK = Boolean.Parse(Page.Request["__EVENTARGUMENT"]);
    if (userClickedOK) {
        // Add some data to SQL.
    } else {
        return;
    }
}

Сначала мы сравним два идентификатора.Если они разные, нам нужно показать окно подтверждения на клиенте и отправить его результат обратно на сервер, поэтому мы включаем для этого скрипт запуска (обратите внимание, что вы можете передать true в качестве последнего аргумента RegisterStartupScript () , чтобы он генерировал для вас теги <script>.

Затем на стороне клиента нам нужно вызвать __doPostBack() для принудительной обратной передачи после вызова блокировки наconfirm() возвращается.__doPostBack() принимает два аргумента: ClientID элемента управления, который инициировал обратную передачу (цель события ), и необязательный аргумент события .Они используются внутренним каналом ASP.NET для создания событий обратной передачи, но это не значит, что мы не можем использовать их в наших интересах.

Более того, если происходит обратная передача и UpdatePanel является целью события, вышеупомянутая сантехника ASP.NET будет только обновлять эту панель (или больше, в зависимости от их свойств UpdateMode, но это другая тема).Поэтому мы вызываем __doPostBack() с ClientID из UpdatePanel, содержащим элементы управления, которые мы хотим обновить, и возвращаемым значением confirm(), преобразованным в строку.

Назад на сторону сервера,страница перезагружается, и наш код запускается снова.Поскольку в комментариях к вашему вопросу вы подразумевали, что если originalId и newId все еще различаются, нам придется снова показывать окно подтверждения, я предполагаю, что в этот раз они будут одинаковыми (else if гарантирует это).

Аргументы, передаваемые __doPostBack(), доступны на стороне сервера из переменных запроса __EVENTTARGET и __EVENTARGUMENT.Итак, во-первых, мы проверяем, является ли цель события нашим UpdatePanel, и если это так, мы знаем, что обрабатываем принудительную обратную передачу, и значение __EVENTARGUMENT имеет смысл.Поэтому мы вызываем Boolean.Parse () , чтобы десериализовать его из строки, сгенерированной нами ранее на стороне клиента, и использовать ее, чтобы решить, обновлять ли базу данных или нет.

1 голос
/ 09 февраля 2011

Используйте поле Hidden на своей странице и установите значение true в false, если пользователь подтвердит это или нет.Затем на стороне сервера проверьте значение вашего скрытого поля, ЕСЛИ это правда, продолжайте процесс. Если не используете return или exit sub.

function confirmDelete()
{

    var x = confirm("Are you sure you want to Delete?");
    if (x)
    { 
        document.getElementById('Hidden1').value = "True";
    }
    else
    {
        document.getElementById('Hidden1').value = "False";
    }
}

Сторона сервера

if (orignalId != newId)
                {
 ScriptManager.RegisterStartupScript(this, this.GetType(), "ajax", "<script language='javascript'>confirmDelete();</script>", false);

If (Hidden1.value=="True")
{
add some data to SQL
}
else
{
return;
}

}

0 голосов
/ 27 августа 2014

ScriptManager.RegisterStartupScript часто имеет тенденцию блокировать всплывающее окно. Если вы попробуете подход по приведенной ниже ссылке, у вас будет полный контроль над каждым кликом во всплывающем окне.

http://02e34b5.netsolhost.com/youtube/Zpopup.aspx

Это всплывающее окно не нуждается в трюках с ajax, javascript, jquery или css, но дает вам полный контроль.

0 голосов
/ 22 августа 2014

Я знаю, что прошло много времени с тех пор, как этот вопрос был задан, но я хотел бы вмешаться, если кто-то все еще ищет краткий, простой ответ.Если вы ищете клиентское всплывающее окно javascript для подтверждения (да или нет, да или отменить и т. Д.) Функции на стороне сервера, такой как удаление элемента db, самый простой способ, который я нашел, - это использовать параметр OnClientClickasp: button или asp: linkbutton в вашей разметке:

<asp:LinkButton Text="Delete" ID="DeleteProj" runat="server" CommandName="deleteproj" OnClientClick="return confirm('Are you sure?');" CommandArgument='<%# Eval("ProjectID") %>'/> 

Нажатие no вернет пользователя на вашу страницу, нажатие yes запустит любой код C #, который вы для него настроили.Это сработало для меня.

...