• 締切済み

ページ間ポスティングと検証コントロール

ASP.NET2005(C#)の勉強をしているのですが、検証コントロールとページ間ポスティングを利用した際にわからないことがあります。 Button1とTextBox1があるとして、 Button1をクリックした際にTextBox1の必須入力の検証(サーバー側での検証)を行い、正常な場合はButton1のPostBackUrlプロパティに指定したページに遷移し、入力チェックに引っ掛かった場合は、通常のポストバックで現在のページのまま検証コントロールのエラーメッセージを表示させたいのですが、そのようなことは可能でしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

PreviousPage.myValidateでエラーになるのであれば ビルド > WEBサイトのビルド を実行してこのアプリケーションで参照するDLLを構築してみましょう

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

> 検証ページ側のクラス内で設定はしているのですが この検証ページと言うのは 呼び出しもとの検証コントロールを設置下ページですよね でなければ『RequiredFieldValidator1』がエラーになりますからね …

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

PreviousPageTypeディレクティブのVirtualPathが正しく設定されていないのかもしれません PreviousPage自体は System.Web.UI.Page型としてインプリメント(実装)されています 独自に作成したプロパティは当然 Page型はあずかり知らない訳ですから PreviousPageTypeで指示することになります

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

検証コントロールを使う際は ボタンの PostBackUrlで別ページに飛ばすより ボタンのClickイベントで Server.Transferを使ったほうが良いようです Response.Redirectでは 飛び先のページでPureviousPageが使えないのでTransferのほうが使い勝手良いでしょう 呼び出し側のボタンClickイベントで   if ( this.IsValid == true )   {     Server.Transfer("飛び先URL");   } 呼び出し先のLoadイベントで   if ( ( this.IsPostback== false ) &&      ( this.PreviousPage != null ) )   {     TextBox oText = (TextBox)(this.PreviousPage.form.       FindControl("TextBox1"));     Label1.Text = oText.Text;   } と言った具合です

dotnet20
質問者

お礼

ありがとうございます。 実はServer.Transferを使う方法は以前から使用していたのですが、 今回はPostBackUrlを使って実現できないかと思いまして質問を投稿しました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

別ページへのポストバックする場合いろいろと設定が必要なようです まず 検証ページにおいて 検証結果を出力できるプロパティを作成します PostBackされるページのaspxファイルの冒頭で PreviousPageTypeディレクティブを使って呼び出すページを設定します Loadイベントで   if ( PreviousPage != null )   {     if ( PreviousPage.myValidate == false )     {       Server.Transfer("postPageのURL");     }   } を記述します 呼び出し側のLoadイベントで   if ( PreviousPage != null )   {     // Server.Transferで呼び出された時     // 検証コントロールの結果を表示させる     Page.Validate();   } 検証コントロール用のプロパティを設定   public bool myValidate   {     get     {       return RequiredFieldValidator1.IsValid;     }   } と言った具合でしょうか 検証をサーバサイドでするなら検証コントロールのEnableClientScriptをFalseに設定するのを忘れずに

dotnet20
質問者

お礼

ありがとうございます。 回答してくださった通りに作ってみたのですが 「'System.Web.UI.Page' に 'myValidate' の定義がありません。」 というエラーが出てしまいます。 myValidateプロパティをどのように定義すればよいでしょうか? public bool myValidate   {     get     {       return RequiredFieldValidator1.IsValid;     }   } のように検証ページ側のクラス内で設定はしているのですが...

関連するQ&A

  • ASP.NETでWebユーザーコントロールを作成していますが、あるユー

    ASP.NETでWebユーザーコントロールを作成していますが、あるユーザーコントロールを拡張して別のユーザーコントロールを作成したいと思っています。 Webカスタムコントロールであれば、クラスの継承の概念を使って派生クラスを作成し、追加したいコントロールやフィールドを派生クラスで追加するのですが、ユーザーコントロールでこれと同じ事はできないものでしょうか? Visual Studio 2005環境ですが、Webカスタムコントロールはデザイナを使った開発ができず、わざわざDLLにコンパイルした後aspxページに埋め込んでやらないと見た目を確認できません。その点、ユーザーコントロールは通常のWindowsフォームアプリケーションのように、デザイナ上でコントロールをD&Dし、プロパティエディタでプロパティの設定もできます。 下記に試してみたコードを示します。 [WebUserControl1.ascx] <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %> <%@ Register Assembly="WebBaseFormLib" Namespace="WebBaseFormLib" TagPrefix="cc1" %> <asp:Button ID="Button1" runat="server" Text="Button1" /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> [WebUserControl1.ascx.cs] namespace WebApplication1 { public partial class WebUserControl1 : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } } } [WebUserControl2.ascx] <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl2.ascx.cs" Inherits="WebApplication1.WebUserControl2" %> <%@ Reference Control="~/WebUserControl1.ascx" %> <asp:Button ID="Button2" runat="server" Text="Button2" /> [WebUserControl2.ascx.cs] namespace WebApplication1 { public partial class WebUserControl2 : WebUserControl1 //WebUserControl1を継承 { protected void Page_Load(object sender, EventArgs e) { } } } こうした場合に、WebUserControl2をaspxページで使用してもButton2しか表示されません。 期待する動きとしては、WebUserControl1に配置したButton1とtextbox1が透過的に表示して欲しかったのですが。

  • ASP.NET web アプリケーションでの入力検証に関して質問です

    ASP.NET web アプリケーションでの入力検証に関して質問です 当方.NET、オブジェクト指向言語初心者です 検討違いなことを質問しているかもしれませんが 回答いただけたら幸いです 以下を使用しています visual studio 2008 .NET Framework 3.5 C# 新規プロジェクト作成時に ASP.NET web アプリケーションを選択し、 (ASP.NET MVC等ではなく) TextBox Button を配置し Buttonを押下した時に TextBoxに何も入力されていなかった場合 エラーメッセージを表示するような入力検証を System.ComponentModel.DataAnnotations を用いて行いたいと考えています (RequiredFieldValidatorではなく) Q1 新規プロジェクト作成時にASP.NET web アプリケーションを選択した場合 System.ComponentModel.DataAnnotations を用いて入力検証はおこなえるのでしょうか? (webで検索したところASP.NET MVCやSilverlightのサンプルはあったのですが・・・) Q2 Q1がYESの場合 具体的にはどう実装すればよいのでしょうか? 以下にソースを記載します ■Defaoult.Aspx <%@ Page Title="ホーム ページ" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> </asp:Content> ■Default.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel.DataAnnotations;  //←※ namespace WebApplication2 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { } } } ※ 参照の追加で System.ComponentModel.DataAnnotations を追加して usingで定義するところまでは検討がつきました 以上、宜しくお願い致します

  • C#で動的に配置したコントロール

    はじめまして 開発歴1年未満の開発者ですがよろしくお願いします。 開発環境 Visual Studio 2008 C# ASP.NET protected void Page_Load(object sender, EventArgs e) { TextBox TextBox = new TextBox(); TextBox.ID = "TextBox1"; TextBox.Text = "C# ASP.NET"; form1.Controls.Add(TextBox); } protected void Button1_Click(object sender, EventArgs e) { string strTextBox1 = ??????? } と上記のように読み込み時に、テキストボックスのみを動的に配置し、デザイナで配置したのボタンを押した際に、テキストボックスに入力された値を、取得したいのですが、方法がわかりません・・・ お忙しいとは、思いますがご回答よろしくお願いします。

  • ASP.NET WEBアプリケーションで作成されたページより他の既存ペ

    ASP.NET WEBアプリケーションで作成されたページより他の既存ページへデータを投げたいと考えているのですがセキュリティ上難しいのでは?と考えています。しかし、なんとか代替案がないかと思っておりどなたかヒントをいただけないでしょうか? <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:TextBox ID="TextBox3" runat="server" Height="72px" TextMode="MultiLine" Width="651px"></asp:TextBox> <br /> <asp:Button ID="Button1" runat="server" Text="Button" />&nbsp;&nbsp; <asp:Button ID="Button2" runat="server" Text="Button" /> <br /> <br /> <asp:Label ID="Label1" runat="server"></asp:Label> 例えばこんな簡単なaspxのページで構成されているとします。 テキストボックスに入れた値を既存のWEBページ(Yahooへのログインだとか)へ入れ込みたいのですが・・・クライアントにスクリプトで作ってとかなら余裕で出来ると思うのですがサーバサイドで仕込むことは難しいでしょうか?回避策とかもあるとなおうれしいのですが・・・よろしくお願いします。

  • ASP.net

    asp:Textboxなどのサーバコントロールについて質問です。 質問(1)サーバコントロールには、runat=Serverと記載しますが、これはサーバにリクエストが走っているということなのでしょうか? 質問(2)それらのコントロールに対して、CSS3のプロパティは指定可能なのでしょうか? 質問(3)JQUERYの、DOCUMENT.READYや、#Button.clickは、使用可能でしょうか?また、JQUERY Mobileは使用可能でしょうか? ◆補則 (1)VBの部品を、ブラウザ上で動かすようなケースであれば、クライアントにダウンロードをさせずに動かすために、サーバで動くということもあるのでしょうが、asp:Textboxなどであれば、内部的にはHTMLのタグなのでしょうか? だとしたらリクエストはしないのですよね? (2)動的に、page.UI.textboxなどを作成すると、HTMLタグが持っている要素をプロパティとして持っていますが、ユーザコントロールは、もしHTMLとして作成されているtextboxならCSSプロパティを指定できそうですが、VBの部品なら操作できるのはVBのコントロールのプロパティですよね? (3)AJAXの考え方は、DOMだけ書き換えようとするのにたいし、ASPでは、FormをSubmitしてリクエストしますよね。 どうやって共存しているのでしょうか?

  • Cross-Page Postingができない

    下記ページを参考にしてVisualStudio 2015を使用してWebFormを2つ作成(Page1とPage2)して みました。 https://code.msdn.microsoft.com/10-Web-C-9dc19c82 参考にしたページによるとCross-Page Postingを行うとPage1からPage2に遷移した時に Page1に入力した値をPage2に引き継げるようなことが書いてありますが値がうまく引き継げません でした。何か設定が必要なのでしょうか。また、皆さんの環境ではうまくいきますでしょうか。

  • VC++ で TextBoxから、次のコントロールに移動する方法について

    VC++で、フォーム上に複数のTextBoxを配置して、タブインデックスで、次に移動したいTextBoxを設定しました。 最初のTextBoxに入力した後、Tabキーで、次のコントロールに移動することはできましたが、Enterキーで次のコントロールへ移動することはできないのでしょうか? TextBoxのプロパティの設定方法とを教えて下さい。

  • PHP処理実行後のページの遷移について

    現在、新規情報登録画面の作成を行っています。 PHPで、データベースにインサート処理後、成功したら他のページへ遷移するという処理を行いたいのですが、PHP側の処理が実行されるとページの遷移が行われず、action='遷移ページ指定'したらインサートが実行されません。 JavascriptとPHPともにまだ学習し始めたばかりの初心者で、わかりにくい質問ですが回答のほうよろしくお願いします。 <処理の流れ> 入力 ↓ 登録ボタン押す ↓ チェック ↓ チェック成功時→ページ遷移 チェック不成功時→ページ遷移なし <html> <head><title>新規登録</title> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.2");</script> </head> <body> <form method="post" action="form_ad_shinki_touroku2.php" name="formA" onsubmit="return AllCheck()"> <script type="text/javascript"> 動的入力フォーム追加機能、チェック機能など </script> <?php SQLの処理など ?> <input type="submit" name="tuika" value=" 登 録 "> <input type="button" onclick="addInput()" value="フォーム追加" /> <input type="button" name="back" value=" 戻 る " onClick="location.href='javascript:history.back();'"> </form> <body> <html>

  • ポストバック時のスクロール位置保存方法について

    VS2005 ASP.NET 縦に非常に長いページがあります。 ページにはGridViewが配置してあり 編集ボタンと任意のボタンの列が追加してあります buttonコントロールを押してポストバックしたときに そのスクロール位置に戻るようにしたいと考えています. 色々調べたところ SmartNavigationで実現できるとあり追加したところ、 編集ボタンについてはスクロール位置を戻せたのですが 任意に追加した列のボタンについてはポストバック時に ページの先頭に戻ってしまいます. 任意のボタンには何か設定が必要ですか? また、JavaScriptを使う方法も見つけたのですが <body>句にonScrollはXHTMLでは動作しないらしく スクロールの位置を取得できませんでした ポストバックしたときに そのスクロール位置に戻るようにしたいです. お力添えお願いします。

  • ASP.NET2で入力チェックと確認メッセージ

    ASP.NET2.0を勉強中なのですが、下記の処理ができずに困っています。どうすればいいのでしょうか? 根本的に考え方が間違っているのでしょうか? <行いたい処理> (1)ボタン押下時に入力チェック (2)(1)がOKなら確認メッセージの表示 (3)「はい」の場合は処理を行う <前提> ページには必須チェックを行う検証コントロールを配置し検証を行っています。 ボタンのOnClickに【return confirm('登録しますか?');】と明記すればメッセージは表示されるのですが、検証コントロールのチェックがされません。 また、サーバー側のボタンのクリックイベントで 【ClientScript.RegisterClientScriptBlock】を使用すると、検証コントロールのチェック、メッセージは表示できるのですが、メッセージの戻り値が取得できません。。。

専門家に質問してみよう