2009-09-23 63 views
12

我面臨的問題是,當頁面驗證並且我試圖顯示模型彈出窗口時,彈出窗口不會顯示。通過使用fire-bug,我注意到正在拋出一個錯誤。ModalPopupExtender和驗證問題

用於顯示彈出式窗口的按鈕將導致驗證設置爲false,因此導致錯誤的原因被卡住了。

我已經創建了一個示例頁面來隔離我遇到的問題,任何幫助將不勝感激。

的錯誤

function() {Array.remove(Page_ValidationSummaries, document.getElementById("ValidationSummary1"));}(function() {var fn = function() {AjaxControlToolkit.ModalPopupBehavior.invokeViaServer("mpeSelectClient", true);Sys.Application.remove_load(fn);};Sys.Application.add_load(fn);}) is not a function 
http://localhost:1131/WebForm1.aspx 
Line 136 

ASP

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CLIck10.WebForm1" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 
<!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 runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     </asp:ScriptManager> 
     <div> 
      <asp:Button ID="btnPush" runat="server" Text="Push" CausesValidation="false" onclick="btnPush_Click" /> 
      <asp:TextBox ID="txtVal" runat="server" /> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtVal" ErrorMessage="RequiredFieldValidator" /> 
      <asp:ValidationSummary ID="ValidationSummary1" runat="server" /> 



     <asp:Panel ID="pnlSelectClient" Style="display: none" CssClass="box" runat="server"> 
     <asp:UpdatePanel ID="upnlSelectClient" runat="server"> 
      <ContentTemplate> 
       <asp:Button ID="btnOK" runat="server" UseSubmitBehavior="true" Text="OK" CausesValidation="false" OnClick="btnOK_Click" /> 
       <asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="false" OnClick="btnCancel_Click" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
     </asp:Panel> 

     <input id="popupDummy" runat="server" style="display:none" /> 

     <ajaxToolkit:ModalPopupExtender ID="mpeSelectClient" runat="server" 
     TargetControlID="popupDummy" 
     PopupControlID="pnlSelectClient" 
     OkControlID="popupDummy" 
     BackgroundCssClass="modalBackground" 
     CancelControlID="btnCancel" 
     DropShadow="true" /> 
    </div> 
</form> 

代碼

背後
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace CLIck10 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void btnOK_Click(object sender, EventArgs e) 
     { 
      mpeSelectClient.Hide(); 
     } 

     protected void btnCancel_Click(object sender, EventArgs e) 
     { 
      mpeSelectClient.Hide(); 
     } 

     protected void btnPush_Click(object sender, EventArgs e) 
     { 
      mpeSelectClient.Show(); 
     } 
    } 
} 
+0

這些點擊處理程序存根是空的嗎?只是因爲你還沒有填充它們,或者你需要回發才能隱藏模式彈出?如果回發沒有必要考慮使用模式彈出窗口的客戶端方法打開和關閉它。 – 2009-09-23 13:40:03

+0

我將向他們添加代碼,這只是爲了演示我遇到的錯誤。 – Malachi 2009-09-23 15:57:28

回答

2

您是否在頁面的任何位置使用驗證組?當控件事件不是驗證組的一部分時,控件事件不會觸發,並且頁面上的其他控件是驗證組的一部分。

+0

將在ValidationGroup中的所有控件關閉爲我工作。在使用此之前,即使ModalPopup也沒有顯示。 – Zeeshanef 2014-02-21 08:56:33

1

我會嘗試改變這一點:

<input id="popupDummy" runat="server" style="display:none" /> 

到這樣的事情:

<asp:Button id="popupDummy" runat="server" CausesValidation="false" Visible="false" /> 

我敢打賭,類型化的輸入需要驗證。

4

嘗試在此事件中將您的ValidationSummary「Enabled」屬性設置爲false:「btnPush_Click」 ;然後在此事件上將其設置回enabled =「true」:「btnOK_Click」,「btnCancel_Click」。

我認爲這將工作,如果你沒有面板內的驗證摘要,你想彈出。但它不是一個解決方案,如果你需要彈出面板內的驗證摘要,......女巫是。我的情況:(

問候

6

這與同時使用的ValidationSummary和ModalPopup問題

在這裏看到:http://ajaxcontroltoolkit.codeplex.com/WorkItem/View.aspx?WorkItemId=12835

的問題是,有一個失蹤 「;」在兩者之間ject腳本。

他們的解決方案是創建/使用繼承自ValidationSummary的自定義服務器控件,該控件注入「;」進入頁面啓動腳本來修復錯誤:

[ToolboxData("")] 
public class AjaxValidationSummary : ValidationSummary 
{ 
    protected override void OnPreRender(EventArgs e) 
    { 
    base.OnPreRender(e); 
    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), this.ClientID, ";", true); 
    } 
} 
+0

試過這個,它沒有解決面板爲我工作後移動modalpopupextender的問題 – 2013-09-05 16:50:33

0

我有同樣的問題,增加ValidationGroup到驗證控件的伎倆!

3

我在網上嘗試了所有可用的答案,但沒有任何工作。然後我嘗試在HTML的最後移動我的模式彈出式擴展器,它對我來說工作正常。我和我的用戶是快樂:) 我不使用FROM標籤我使用的內容佔位符,就像下面:

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 
<table id="tblMessage" runat="server" width="100%" > 
    <tr align="center"> 
     <td align="center"> 

主要內容和

<asp:Panel ID="pnlSelectClient" Style="display: none" CssClass="box" runat="server">

<asp:ValidationSummary ID="ValidationSummary1" runat="server" /> 
    <asp:UpdatePanel ID="upnlSelectClient" runat="server"> 
     <ContentTemplate> 
      <asp:Button ID="btnOK" runat="server" UseSubmitBehavior="true" Text="OK" CausesValidation="false" OnClick="btnOK_Click" /> 
      <asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="false" OnClick="btnCancel_Click" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    </asp:Panel> 

如果您發現我有面板驗證摘要,因爲我想彈出裏面的錯誤消息(我也彈出一些額外的控制)。和

更多的HTML標籤在這裏,因爲我有很多其他的事情要做在一個頁面。在結束表格標記之前

<ajaxToolkit:ModalPopupExtender ID="mpeSelectClient" runat="server" 
    TargetControlID="popupDummy" 
    PopupControlID="pnlSelectClient" 
    OkControlID="popupDummy" 
    BackgroundCssClass="modalBackground" 
    CancelControlID="btnCancel" 
    DropShadow="true" /> 

</table> 

Done.it正在工作。希望對其他人也有效。

+0

。謝謝 – 2013-09-05 16:57:55

0

還有一件事要嘗試,如果你不需要客戶端腳本,你可以在標記中禁用它。這樣做解決了我們的問題。

EnableClientScript="false"