Как отобразить диалоговое окно подтверждения с C # на клиент и использовать результат

#c# #javascript #jquery #asp.net

#c# #javascript #jquery #asp.net

Вопрос:

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

Мой код:

 public class DeleteFilePDF : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        System.Web.HttpRequest request2 = System.Web.HttpContext.Current.Request;
        string strSessVar2 = request2.QueryString["fileVar"];

        //MessageBox.Show(strSessVar2);
        if (File.Exists(strSessVar2))
        {
            DialogResult dlgRes = MessageBox.Show("Do you really want to delete the file?", "Program Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dlgRes == DialogResult.Yes)
            {
                try
                {
                    File.Delete(strSessVar2);
                    HttpContext.Current.Response.Redirect("PDFAllFilesDisplay.aspx", false);
                }
                catch (Exception ce)
                {
                }
            }
        }
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
}
  

Мой ImageButton код:

 <asp:ImageButton runat="server" ToolTip="Delete File" ID="lnkDelete" OnClick="DeleteFile" CommandArgument='<%# Container.DataItemIndex %>' ImageUrl="~/delete.png" Width="50px" Height="50px" />
  

Мой ImageButton код, лежащий в основе:

 protected void DeleteFile(object sender, EventArgs e)
    {
        string strFile = GridView1.Rows[Convert.ToInt32(((ImageButton)sender).CommandArgument.ToString())].Cells[0].Text;
        string strFolderFile = strDirectory   strFile;
        //MessageBox.Show(strFolderFile);
        Response.Redirect("DeleteFilePDF.ashx?fileVar="   strFolderFile);
    }
  

Все работает так, как должно быть в среде отладки, но вне этого я не могу использовать MessageBox.Show() функцию. Как я могу добиться того же, используя диалоговое окно подтверждения jQuery / JavaScript?

Комментарии:

1. В javascript вы можете использовать диалоговое окно подтверждения.

2. Я обновил свой вопрос, чтобы подробнее объяснить, что я делаю… Как бы я это реализовал

3. Примечание: поскольку ваш код является всего лишь образцом, вполне допустимо иметь серьезные проблемы с безопасностью (единственное, что обычно приводит к немедленному снижению голосов, — это SQL-инъекция на данный момент). В будущем рассмотрите возможность не публиковать код с очевидными проблемами — проверьте атаку одним щелчком .

4. Я использую session, поэтому, если отправленная переменная сеанса не соответствует тому, что было на странице отправки, мой код не выполняется.

Ответ №1:

Получите подтверждение от javascript и обработайте сервер щелчком мыши

 <asp:ImageButton runat="server" OnClientClick="return getConfirmation()" 
     ToolTip="Delete File" ID="lnkDelete" OnClick="DeleteFile" 
     CommandArgument='<%# Container.DataItemIndex %>' 
     ImageUrl="~/delete.png" Width="50px" Height="50px" />
  

Затем JS-код

   function getConfirmation(){
    return window.confirm("Do you really want to delete the file?");
  }
  

Есть несколько хороших пользовательских интерфейсов, доступных для отображения окна подтверждения. Проверьте jQuery Modal dialog или bootstrap bootbox и т. Д

Комментарии:

1. Я использую командный параметр GridView для получения значения. Поэтому я не уверен, сработает ли это.

2. На самом деле я закончил тем, что использовал что-то похожее на ваше. Спасибо за ответ.

Ответ №2:

Вы не можете сделать это таким образом, потому что ваш обработчик выполняется на сервере. Вместо этого вам придется использовать JavaScript, чтобы решить, удалять файл или нет. например:

 <input type="button" onclick="deleteFile()" value="Delete File" title="Press to delete file" />

function deleteFile {
    //show dialog with jquery or anything similar
    //if yes is selected, then make the handler call using ajax. for example using jquery ajax: 
   $.ajax({ url: [handler url]   [query string], method: "post" });
}
  

Комментарии:

1. Спасибо за ответ. Я использовал аналогичный метод.