L B Choudhury Ответов: 2

C#, ASP.NET: как получить окно подтверждения сообщения из кода на стороне сервера при выполнении условия


Привет,
У меня есть кнопка на моей странице, которая используется для сохранения данных gridview, которые динамически заполняются. Перед сохранением я хочу проверить некоторые условия. Функция javascript выглядит следующим образом:
<script type="text/javascript">
        function Confirm() {
            var confirm_value = document.createElement("INPUT");
            confirm_value.type = "hidden";
            confirm_value.name = "confirm_value";
            if (confirm("This will completely delete the project. Are you sure?")) {
                confirm_value.value = "Yes";
            }
            else {
                confirm_value.value = "No";
            }
            document.forms[0].appendChild(confirm_value);
        }
    </script>
<asp:Button runat="server" ID="lnkBtn" onClick="lnkBtn_Click" onClientClick="Confirm()"></button>

Код, стоящий за этим, выглядит следующим образом:
protected void lnkBtn_Click(object sender, EventArgs e)
        {
            string str=gdView.HeaderRow.Cells[8].Text;
            System.Web.UI.WebControls.TextBox txtID = (System.Web.UI.WebControls.TextBox)gdView.Rows[0].Cells[8].FindControl(str);
            if (txtID.Text != "")
            {
                string confirmValue = Request.Form["confirm_value"];
                if (confirmValue == "Yes")
                {
                    MyAlert("Yes clicked");
                }
                else
                {
                    MyAlert("No clicked");
                }
            }
            else
            {
                MyAlert("No Text found.");
            }
        }

Теперь проблема заключается в том, что поскольку у меня есть функция Confirm() в событии onClientClick, диалоговое окно подтверждения появляется в тот момент, когда пользователь нажимает кнопку, которая на самом деле не предназначена, вместо этого она должна появляться только тогда, когда строка найдена в txtID.

Что я уже пробовал:

Я попытался изменить код, удалив событие onClientClick следующим образом:
<asp:Button runat="server" ID="lnkBtn" onClick="lnkBtn_Click" ></button>

protected void lnkBtn_Click(object sender, EventArgs e)
        {
            string str=gdView.HeaderRow.Cells[8].Text;
            System.Web.UI.WebControls.TextBox txtID = (System.Web.UI.WebControls.TextBox)gdView.Rows[0].Cells[8].FindControl(str);
            
            if (txtID.Text != "")
            {
                
                this.Page.ClientScript.RegisterStartupScript(this.GetType(), "confirm", "Confirm();", true);
                string confirmValue = Request.Form["confirm_value"];
                
                if (confirmValue == "Yes")
                {
                    MyAlert("Yes clicked");
                }
                else
                if (confirmValue == "No")
                {
                    MyAlert("No clicked");
                }
            }
        }

Здесь также он не работает должным образом. ConfirmValue получает значение, но использует его только при последующем нажатии кнопки. Он не передает значение, сохраненное во время текущего события щелчка, вместо этого ранее сохраненное значение передается в блок if. Пожалуйста, помогите найти, что я должен сделать, чтобы все было правильно.
Спасибо.

2 Ответов

Рейтинг:
2

Member 14704267

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CsBaseCore = Lib.LibCS.Base.Core;
using TelerikWebUI = Telerik.Web.UI;
using CSBizEntityTransactionAdmin = Lib.LibCS.Business.Entity.Transaction.Admin;

namespace bERPWebClient.Applications.OnlineMeetingRoomBooking
{
    public partial class MeetingRoomPopupGuest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (Session["RoomBookingID"] != null)
                {
                    String strBookingID = Session["RoomBookingID"].ToString().ToLower();
                    BindExternalGuestInfoGrid(strBookingID);
                    BindInternalEmployeeInfoGrid(strBookingID);
                }
            }
            catch (System.Exception se)
            {
                string script = "alert('" + se.Message.Replace("'", "\"").Replace(@"\", @"\\") + "');";
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "alert", script, true);
            }
        }


        void BindExternalGuestInfoGrid(String pstrBookingID)
        {
            IList lstGuestInfo = new List();
            CSBizEntityTransactionAdmin.MeetingRoomBooking objMeetingRoom = new CSBizEntityTransactionAdmin.MeetingRoomBooking();
            lstGuestInfo = objMeetingRoom.GetExternalGuestInfo(pstrBookingID);
            rgridDisplayGuestInfo.DataSource = lstGuestInfo;
            rgridDisplayGuestInfo.DataBind();         
        }

        void BindInternalEmployeeInfoGrid(String pstrBookingID)
        {
            IList lstEmployeeInfo = new List();
            CSBizEntityTransactionAdmin.MeetingRoomBooking objMeetingRoom = new CSBizEntityTransactionAdmin.MeetingRoomBooking();
            lstEmployeeInfo = objMeetingRoom.GetInternalEmployeeInfo(pstrBookingID);
            rgridDisplayEmployeeInfo.DataSource = lstEmployeeInfo;
            rgridDisplayEmployeeInfo.DataBind();
        }

    }
}

//Contact number of the person who is booking the room


Dave Kreskowiak

Это не имеет никакого отношения к вопросу, который был задан два года назад.

Рейтинг:
15

F-ES Sitecore

Вы должны иметь в виду, что asp.net жизненный цикл страницы. Ваш .net-код выполняется полностью и генерирует html, который отправляется клиенту для интерпретации, поэтому вы не можете смешивать серверный код и поток клиентского кода, что фактически и нужно делать. Есть несколько методов, как вы можете получить клиент, чтобы подтвердить, что вы хотите продолжить что-то на стороне сервера здесь

Просьба к пользователю подтвердить, что он хочет продолжить выполнение действия | ASP.NET форумы[^]


L B Choudhury

Большое спасибо. Это действительно спасло мне жизнь.