残念ながら、WebForms モデル バインディングの検証フレームワークは、まだ MVC ほど包括的ではありません。1 つは、データ注釈のクライアント側検証が組み込まれていないことです。また、データ注釈エラーを表示する唯一の方法は、ShowModelStateErrors プロパティ (デフォルトは true) を持つ ValidationSummary コントロールを使用することです。これは非常に簡単な例です:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:FormView ID="FormView" runat="server" RenderOuterTable="false" ItemType="Person"
DefaultMode="Insert" InsertMethod="FormView_InsertItem">
<InsertItemTemplate>
<asp:ValidationSummary ID="ValSummary" runat="server" ValidationGroup="FormGroup"
HeaderText="The following problems occured when submitting the form:" />
<table>
<tr>
<td>
<asp:Label ID="NameLabel" runat="server" AssociatedControlID="NameField">Name</asp:Label>
</td>
<td>
<asp:TextBox ID="NameField" runat="server" Text='<%# BindItem.Name %>' ValidationGroup="FormGroup" />
</td>
</tr>
</table>
<asp:Button ID="SaveButton" runat="server" CommandName="Insert" Text="Save" ValidationGroup="FormGroup" />
</InsertItemTemplate>
</asp:FormView>
</form>
</body>
</html>
コードビハインド:
public partial class create_person : System.Web.UI.Page
{
public void FormView_InsertItem()
{
var p = new Person();
TryUpdateModel(p);
if (ModelState.IsValid)
{
Response.Write("Name: " + p.Name + "<hr />");
}
}
}
クラス:
using System.ComponentModel.DataAnnotations;
public class Person
{
[Required, StringLength(50)]
public string Name { get; set; }
}
データ注釈の検証に対するクライアント側/JavaScript のサポートがないため、モデル状態エラーを生成する唯一の方法は、ポストバックの後です。コントロールの横にインライン検証が必要な場合でも、標準の検証コントロールを使用する必要があります。
ユーザーの声に関する機能要求を投稿し、データ注釈の統合を改善することを検討するよう求めました:
http://aspnet.uservoice.com/forums/41202-asp-net-web-forms/suggestions/3534773-include-client-side -validation-when-using-data-ann
アイデアが気に入ったら、ユーザーの声に投票してください。お役に立てれば。