2012-01-01 23 views
2

我正在使用jquery UI模式彈出窗口顯示用戶登錄窗體。 該腳本在窗體周圍添加html元素來構建彈出窗口。在回發上的輸入是空的

當我提交登錄表單 - 文本框在後面的代碼中似乎是空的,即使我已經輸入了它的值。

我認爲這是因爲輸入從原始位置移動,因此代碼以某種方式驗證請求。

問題是:有沒有辦法讓值通過任何方式?或者禁用此驗證?代碼

例子:

HTML:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UI-login.aspx.cs" Inherits="tests_UI_login" %> 

<!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"> 
    <script src="/js/jquery-1.6.4.min.js" type="text/javascript"></script> 
    <script src="/js/jquery-ui-1.8.8.custom.min.js" type="text/javascript"></script> 
    <link href="/css/custom-theme/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" /> 

    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <script type="text/javascript"> 
    Sys.Application.add_load(function (sender, args) { 

        // Dialog  
        $('#loginDialog').dialog({ 
         autoOpen: true, 
         width: 600, 
         resizable: false, 
         modal: true, 
         show: 'slide', 
         hide: 'slide' 


        });}) 
    </script> 
    <div id="loginDialog"> 
     <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox> 
     <asp:LinkButton ID="btnLogin" runat="server" onclick="btnLogin_Click1">Login</asp:LinkButton> 
    </div> 
    </form> 
</body> 
</html> 

C#:

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

    } 

    protected void btnLogin_Click1(object sender, EventArgs e) 
    { 
     string email = txtEmail.Text; //Here the value is empty 
    } 
} 
+1

很好的解釋,但它會更好看孤立的代碼和任何其他相關的代碼... – xandercoded 2012-01-01 15:13:45

+0

你在做任何與JS端輸入元素?另請檢查您的服務器端的Request.Form。 – dotnetstep 2012-01-01 15:17:55

+0

@Xander剛剛發佈了一個代碼的例子... – jekcom 2012-01-01 20:28:59

回答

0
<body> 


<div id="loginDialog"> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 

     <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox> 
     <asp:LinkButton ID="btnLogin" runat="server" onclick="btnLogin_Click1">Login</asp:LinkButton> 

    </form> 
    <script type="text/javascript"> 
     Sys.Application.add_load(function (sender, args) { 

      // Dialog  
      $('#loginDialog').dialog({ 
       autoOpen: true, 
       width: 600, 
       resizable: false, 
       modal: true, 
       show: 'slide', 
       hide: 'slide' 


      }); 
     }) 
</script> 
    </div> 
</body> 

我做了類似上面的工作。我在對話框中保留了form1。

+0

你是對的,它確實將輸入從表單中提取出來。不幸的是,將整個表單放在彈出框中並不是一個選項,因爲表單位於母版頁上,我只需要在彈出框中顯示幾個字段。我可能會添加一行腳本,將其放回到表單標記中。謝謝。 – jekcom 2012-01-02 08:43:59

0

其實有幾個問題,最快的解決辦法是使用現有的插件,像jQuery Form Plugin

+0

恐怕我只能在頁面上使用一個表單元素。 – jekcom 2012-01-01 20:30:16

2

要獲取代碼中輸入的值並通過服務器控制機制(textBox.Text)訪問它們,其狀態(和存在)需要保留在ViewState中。由於您正在使用JavaScript構建它們,因此它們的狀態不會保留,您可以通過使用Request.Form集合來獲取它們的值。

像往常一樣,張貼相關的代碼,可能會產生更具體的答案。

+1

'textBox.Text'會引發編譯時錯誤。所以,他並沒有通過腳本添加輸入字段。最有可能的一些其他「裝飾」的HTML。這就是爲什麼OP需要發佈一些代碼... – xandercoded 2012-01-01 15:22:38

+0

@Tomislav馬爾科夫斯基代碼示例發佈 – jekcom 2012-01-01 20:31:04

+0

我很難再現這一點。當我輸入東西並點擊Login時,'textEmail.Text'就有一個值。我在點擊處理程序中設置了一個斷點,一切似乎都正常。 – 2012-01-01 20:59:43

0

我找到了解決方案。只需將對話框添加到表單即可。

http://labs.kaliko.com/2011/08/jquery-ui-dialog-aspnet-postback.html

更新1:

爲了讓大家開心,解決的辦法是模態註冊到形式:

var myDialog = jQuery("#myDialog").dialog({ width: 480, height: 400 }); 
myDialog.parent().appendTo(jQuery("form:first")); 
+0

已有相同的答案。請查看我們的常見問題解答:http://stackoverflow.com/faq – ForceMagic 2012-11-13 20:27:04

+0

此外,在堆棧溢出時,通常會發布解決方案,然後引用來源。您需要將網頁的結論移到此頁面上。 – Mikhail 2012-11-13 20:28:02

+0

很好的答案,指出我正確的方向! – 2013-03-22 03:26:36