dポイントプレゼントキャンペーン実施中!

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で定義するところまでは検討がつきました

以上、宜しくお願い致します

A 回答 (2件)

3.5だとDynamicDataのプロジェクトの中でないとDataAnnotationsによる検証は使えないですね。


4になると参考URLのような方法も使えるように拡張されているんですけどね。

参考URL:http://dotnetfan.org/blogs/dotnetfanblog/archive …
    • good
    • 0

System.ComponentModel.DataAnnotationsは、ASP.NET WebApplication/WebSiteでは(ほぼ)使えません。



たしかEntity Frameworkと同時に実装されたコンポーンネントで、エンティティオブジェクトを使ったリアルタイム値検証に用いられ、WindowsFormやWPF、SylverlightRuntimeでも、3から?実装されたと思います。
ASP.NET WebFormやWebSiteでは、入力値を自動供給する「モデルバインダ」の概念がなくPostBackやViewState、サーバ/クライアント検証(JavaScript)という仕組み、検証結果の通知など全部が特殊なので、そのままでは使用できません。
その周辺を全部自分で実装する(ASP.NET複雑すぎ。。自分には無理)か、海外のフレームワーク探すか、諦めてMVC使う必要があります。

ASP.NET MVC1になってWebベースの「モデルバインダ」が実装されたため、新しいSystem.ComponentModel.DataAnnotationsがオプションで出て、MVC2になってようやく完成形として標準実装なったんですね。

ASP.NET MVCではフォーム入力値を自動で「エンティティオブジェクト」に格納する仕組み(モデルバインダ)があるため、受け側のメンバの属性を付加したクラスに叩き込み、自動で検証結果をサーバサイド、クライアントサイドに表示することができます。
(自分でカスタム検証追加もOK)

このあたりの仕組みはJAVAやRubyのフレームワークも全く同じです。
やっぱ時代はMVCかと。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!