2012-01-01 16 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

+0

JS側の入力要素で何かしていますか?また、サーバー側のRequest.Formもチェックしてください。 – dotnetstep

+0

@ Xanderちょうどコードの例を掲載しました... – jekcom

答えて

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> 

私は上記のようなことをしました。私はdialog1の中にform1を保った。

+0

フォームから入力を取り出すのは間違いありません。残念ながら、ポップアップの内部にフォーム全体を置くことはオプションではありません。フォームがマスターページ上にあり、ポップアップに表示するフィールドがほんの少し必要です。おそらく、フォームタグの中に戻すスクリプト行を追加するでしょう。ありがとう。 – jekcom

0

は、実際にいくつかの問題があり、最速のソリューションはjQuery Form Pluginのように、既存のプラグインを使用することです。

+0

私は恐怖です。私はページ上で1つのフォーム要素しか使用できません。 – jekcom

2

コードの入力の値を取得し、サーバーコントロールメカニズム(textBox.Text)を使用してアクセスするには、その状態(およびプレゼンス)をViewStateで保持する必要があります。あなたはjavascriptを使ってそれらを構築しているので、その状態は保持されません。値を取得できる唯一の方法はRequest.Formコレクションを使用することです。

通常どおり、関連するコードを投稿すると、より具体的な回答が得られる場合があります。

+1

'textBox.Text'はコンパイル時エラーをスローします。したがって、彼はスクリプトを通して入力フィールドを追加していません。ほとんどの場合、他の「装飾的な」HTML。それでOPがいくつかのコードを投稿する必要があるのです。 – xandercoded

+0

@Tomislav Markovskiのコード例が掲載されました – jekcom

+0

私はこれを再現するのに苦労しています。 'textEmail.Text'は何かを入力してログインをクリックすると値を持ちます。私は、クリックハンドラにブレークポイントを設定して、すべてうまくいくようです。 –

0

解決策が見つかりました。フォームにダイアログを追加するだけです。

アップデート1 http://labs.kaliko.com/2011/08/jquery-ui-dialog-aspnet-postback.html

を参照してください:

すべてを幸せにするために、溶液がフォームにモーダルを登録することである。

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

すでに同じ回答があります。私たちのFAQを見てください:http://stackoverflow.com/faq – ForceMagic

+0

また、スタックオーバーフローでは、ソリューションを投稿してからソースを引用するのが通例です。 Webページからこのページに結論を移す必要があります。 – Mikhail

+0

良い答え、正しい方向に私を指摘! –

関連する問題