积极答复者
为什么弹出窗口的代码在单一页面正常,放到母版页就不运行了!?

问题
-
最近得到一段代码,可以弹出窗口并通过comfirm看是否执行!
--
我把它放在单一的网页中,调试成功了;但我把它放到含母版页的界面中,Button2就没反应了!代码1虚线以上是在单一网页上调试成功的例子,虚线以下是在母版页失败的例子! 代码2是后台。
--
我把可能出错的那一段代码标记了下划线,请各位帮忙看看,3Q!
--
-------------------------------代码1-------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title><%--PerformValidation and ValidationGroup Example--%></title> </head> <body> <form id="form1" runat="server"> <div> <%--JavaScript 的 Confirm 選擇完後,再自動呼叫 C# 函數 - 沒 Ajax / UpdatePanel 的版本--%><p></p> <asp:Button ID="Button1" runat="server" Text="Button1 (按下後會彈出 Confirm 再供選擇)" onclick="Button1_Click" Font-Size="13px"/> <p></p> <%--畫面下方的 Button2 被故意隱藏起來,因我們只是要它的 Button2_Click 事件處理函數,作為傳遞流程的中介。--%><br /> <asp:Button ID="Button2" runat="server" Text="" onclick="Button2_Click" ForeColor="White" Width="0px" Height="0px" BorderColor="White" BorderWidth="0px" /> </div> </form> </body> </html> ----------------------------------------------------------------------- <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default12.aspx.cs" Inherits="Default12" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server"> <%--JavaScript 的 Confirm 選擇完後,再自動呼叫 C# 函數 - 沒 Ajax / UpdatePanel 的版本--%><p></p> <asp:Button ID="Button1" runat="server" Text="Button1 (按下後會彈出 Confirm 再供選擇)" onclick="Button1_Click" Font-Size="13px"/> <p></p> <%--畫面下方的 Button2 被故意隱藏起來,因我們只是要它的 Button2_Click 事件處理函數,作為傳遞流程的中介。--%><br /> <asp:Button ID="Button2" runat="server" Text="" onclick="Button2_Click" ForeColor="White" Width="0px" Height="0px" BorderColor="White" BorderWidth="0px" /> </asp:Content> <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> </asp:Content>
---------------------------------代码2-----------------------------------
protected void Button1_Click(object sender, EventArgs e) { Response.Write("<font color='red'>Button1_Click 執行完成 </font><p>"); //二段式的 Client-Server 來回 : //Server-side 的 Button1_Click 執行完、回到 Client-side 後,會彈出 JavaScript 的 Confirm 對話框,若 //使用者選擇了「確定」,則會「自動」執行 Button2 的 Click 事件處理常式,亦即二度前往 Server-side Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('Submit form?');" + "if (retValue) {document.getElementById('Button2').click();}; else { }", true); } protected void Button2_Click(object sender, EventArgs e) { Response.Write("<font color='red'>Button2_Click 執行完成 </font><p>"); this.func3(); } //這個為我們在後端,真正想被執行的 c# 自訂函數 (可放在 App_Code 資料夾裡的自訂類別) private void func3() { Response.Write("<font color='red'>func3 執行完成 </font><p>"); }
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
- 已编辑 linjiangxian11 2013年10月24日 7:35
答案
-
Sorry! 我的Code多了 ' ,修正如下,
Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('Submit form?');" +
"if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true);另外,如果您的.net的版本是4.0的話,您可以設定 ClientIDMode="Static" 這樣Client的Id跟Server的Id就會是一致的!
就可以不用改原本的Code,直接用Button2即可!
<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" ClientIDMode="Static" />
- 已建议为答案 ThankfulHeart 2013年10月25日 8:12
- 取消建议作为答案 linjiangxian11 2013年10月28日 0:41
- 已标记为答案 linjiangxian11 2013年10月29日 7:48
全部回复
-
您好,
在單個page中,Button2的clientID為Button2。
但包到了masterPage之中,應該不是Button2了哦!
請使用Button2.ClientID
Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('Submit form?');" +
"if (retValue) {document.getElementById(''" + Button2.ClientID + "'').click();}; else { }", true);Other Info
http://www.dotblogs.com.tw/rainmaker/archive/2009/10/16/11085.aspx
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
- 已编辑 亂馬客 2013年10月24日 10:09
-
Sorry! 我的Code多了 ' ,修正如下,
Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('Submit form?');" +
"if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true);另外,如果您的.net的版本是4.0的話,您可以設定 ClientIDMode="Static" 這樣Client的Id跟Server的Id就會是一致的!
就可以不用改原本的Code,直接用Button2即可!
<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" ClientIDMode="Static" />
- 已建议为答案 ThankfulHeart 2013年10月25日 8:12
- 取消建议作为答案 linjiangxian11 2013年10月28日 0:41
- 已标记为答案 linjiangxian11 2013年10月29日 7:48
-
谢谢!终于成功了!还有最后一个小小的问题,就是如何把“你选择的时间”和“所属分公司”分行显示呢?我用\n没成功
protected void Button1_Click(object sender, EventArgs e) { Response.Write("<font color='red'>Button1_Click 執行完成 </font><p>"); string strtime2 = Calendar_Time.SelectedDate.ToShortDateString(); string strBelongToCompany = DropDownList_Company.SelectedValue.ToString(); Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + "所属分公司:" + strBelongToCompany + "');" + "if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true); }
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
-
用“\r\n”看看呢?
或者拼接:Environment.NewLine看看。
Click For donating:Free Rice For the poor
For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
For more things to talk about? StackOverFlow is your choice.- 已编辑 ThankfulHeart 2013年10月25日 8:58 补充
-
您好,
小弟測試了一下,沒有問題說!
protected void Button1_Click(object sender, EventArgs e) { Response.Write("<font color='red'>Button1_Click 執行完成 </font><p>"); string strtime2 = Calendar_Time.SelectedDate.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); string strBelongToCompany = string.Empty; if(DropDownList_Company.SelectedIndex>-1) strBelongToCompany = DropDownList_Company.SelectedItem.Text; Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + "所属分公司:" + strBelongToCompany + "');" + "if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true); }
-
或者拼接:Environment.NewLine看看。
Click For donating:Free Rice For the poor
For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
For more things to talk about? StackOverFlow is your choice. -
您好,
或許是有Javascript的錯誤!
請您按下Button後,檢視網頁的原始碼,看Render出來的Javascript是不是有什麼錯誤的地方!
或是先response strtime2 及 strBelongToCompany 的值出來!
-
我不会看源代码啊,只好把源代码发到https://skydrive.live.com/?cid=10AE47740A646D6E&id=10AE47740A646D6E%21105上了,能帮我看看么?
拼接 Environment.NewLine不会用,基础太差了,正努力中。。。
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
-
\n\r试试看。
Click For donating:Free Rice For the poor
For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
For more things to talk about? StackOverFlow is your choice. -
您好,
請問您按下button1,有彈出confirm詢問您嗎?
它會詢問您yes or no,請按下no後,再檢示源代碼!
-
您好,
請您先修改Button1_Click function的code
Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + "所属分公司:" + strBelongToCompany + "'); " , true);
然後看confirm有沒有被執行,沒有的話,請檢視源代碼,看看是否有什麼錯誤! 謝謝!
-
谢谢您的解答。目前代码执行良好,唯一的缺陷是不能在提示窗口中把几段信息分行显示!
下面是我的代码,我想能分行显示更好看!如图1的效果
string strtime2 = Calendar_Time.SelectedDate.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); string strBelongToCompany = string.Empty; if (DropDownList_Company.SelectedIndex > -1) strBelongToCompany = DropDownList_Company.SelectedItem.Text; Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + " 所属分公司:" + strBelongToCompany + "');" + "if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true);
---------------------------图1----------------------------------
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
-
\n\r看看。
Click For donating:Free Rice For the poor
For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
For more things to talk about? StackOverFlow is your choice. -
谢谢解答!我用了\n\r后,弹出窗口反而不弹出来了!下面是加了\n\r的代码,我标记了下划线!
Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + "\n\r 所属分公司:" + strBelongToCompany + "');" + "if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true);
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
-
您好,
請試一下(@"\n所属分公司:"),
Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + @"\n所属分公司:" + strBelongToCompany + "');" + "if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true);
-
谢谢您的耐心解答,这个问题终于完美解决了!后台不利用任何插件,就能让弹出窗口实现“确认、取消”、“分行显示选择的信息”,代码虽长但是简单易懂。
下面再发一个完整的代码,希望能对后来者有所帮助!真的很佩服msdn上热心人!呵呵!
-------------------------------前台-----------------------------
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Try_ClientResponse_Default" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server"> <asp:DropDownList ID="DropDownList_Company" runat="server" AutoPostBack="True"> <asp:ListItem>九州分公司</asp:ListItem> <asp:ListItem>物业管理部</asp:ListItem> <asp:ListItem>株洲分公司</asp:ListItem> </asp:DropDownList> <asp:Calendar ID="Calendar_Time" runat="server"> </asp:Calendar> <asp:Button ID="Button1" runat="server" Text="Button1 (按下後會彈出 Confirm 再供選擇)" onclick="Button1_Click" Font-Size="13px"/> <asp:Button ID="Button2" runat="server" Text="Button2" OnClick="Button2_Click" ClientIDMode="Static" Width="0px" Height="0px" BorderColor="White" BorderWidth="0px"/> <%--另外,如果您的.net的版本是4.0的話,您可以設定 ClientIDMode="Static" 這樣Client的Id跟Server的Id就會是一致的! 就可以不用改原本的Code,直接用Button2即可!--%> </asp:Content> <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> </asp:Content>
-----------------------------------后台--------------------------------
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Try_ClientResponse_Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { Response.Write("<font color='red'>Button1_Click 執行完成 </font><p>"); //二段式的 Client-Server 來回 : //Server-side 的 Button1_Click 執行完、回到 Client-side 後,會彈出 JavaScript 的 Confirm 對話框,若 //使用者選擇了「確定」,則會「自動」執行 Button2 的 Click 事件處理常式,亦即二度前往 Server-side //////原代码(适用于无母版页页面),因为在单个的界面中Button2的ClienID还是Button2 //string strtime2 = Calendar_Time.SelectedDate.ToShortDateString(); //string strBelongToCompany = DropDownList_Company.SelectedValue.ToString(); //Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('Submit form?');" + // "if (retValue) {document.getElementById('Button2').click();}; else { }", true); //////适用于有母版页页面 string strtime2 = Calendar_Time.SelectedDate.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); string strBelongToCompany = string.Empty; if (DropDownList_Company.SelectedIndex > -1) strBelongToCompany = DropDownList_Company.SelectedItem.Text; //上面那一句不能展示弹出窗口的分行效果,因为没有用@"\n //Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + " 所属分公司:" + strBelongToCompany + "');" + "if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true); Page.ClientScript.RegisterStartupScript(typeof(string), "Button1_Click", "var retValue=confirm('你选择的时间:" + strtime2 + @"\n所属分公司:" + strBelongToCompany + "');" + "if (retValue) {document.getElementById('" + Button2.ClientID + "').click();}; else { }", true); //1.值得继续研究的:还有一种利用前台OnClientClick来Comfirm的,缺点是不能显示需要确定的信息!优点是简单! //2.下面这个可以显示需要确定的信息,但还是会继续执行 //Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script lanuage=javascript>if(confirm('时间:" + strtime2 + " 分公司:" + strBelongToCompany + " 请确认数据!')==false){history.back()};</script>"); } protected void Button2_Click(object sender, EventArgs e) { Response.Write("<font color='red'>Button2_Click 執行完成 </font><p>"); this.func3(); } //這個為我們在後端,真正想被執行的 c# 自訂函數 (可放在 App_Code 資料夾裡的自訂類別) private void func3() { Response.Write("<font color='red'>func3 執行完成 </font><p>"); } }
C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!
- 已建议为答案 ThankfulHeart 2013年10月29日 9:24