1

もう狂ってる。MVC 1 から 2 にアップグレードした MVC ソリューションがあります。

ここにいくつかのコードがあります:

コントローラーで:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Security.Principal;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Web.UI;
using MF.Services.Authentication;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MF.Controllers
{
     //basic viewmodel
     public class LogOnViewData
     {
     [Required]
     public string UserName { get; set; }

     [Required]
     public string Password { get; set; }
     }

    [HandleError]
public class AccountController : Controller
{
         [HttpPost]
         public ActionResult LogOn(LogOnViewData lvd, string returnUrl)
         {

         if (ModelState.IsValid)
         {
        //do stuff - IsValid is always true
         }
         }
    }
}

ModelState は常に有効です。ただし、モデルは正しく設定されています。したがって、ユーザー名とパスワードの両方を空白のままにしてフォームを投稿しても、モデルの状態は引き続き有効です。ああ!

追加情報: IoD の構造マップを使用します。以前は、MVC 2 にアップグレードする前に MS データ注釈ライブラリを使用していたため、global.asax.cs に次のものがありました。

今それを削除しました。

私は本当に基本的で間違ったことをしていると確信しています。誰かがそれを指摘できれば、それは素晴らしいことです。乾杯

4

1 に答える 1

0

MVC2 の開発の途中で、入力の検証からモデルの検証に移行しました。これは、すべての場合においてオブジェクトを完全に検証する必要があります。最新バージョン (RTM) を使用していることを確認してください。

ただし、[Required]属性が であってはならないことを示すだけnullです。残念ながら、文字列String.Emptyのデフォルトである - は ではないnullため、モデルの検証は空の文字列に対してパスします。

重要な詳細については、Brad Wilson によるこの投稿を参照してください。

解決策として、 を使用して[RegularExpression("....")]、文字列の最小長と使用できる文字に制限を課すことができます。

于 2010-03-18T17:44:23.367 に答える