0

ASP.NET MVC アプリケーションでは、次のように定義されたモデルがあります。

public class TestModel
{
    private string _firstName;

    [DisplayName("First Name")]
    [StringLength(20)]
    public string FirstName
    {
        get { return _firstName; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                if (value.Length > 20)
                    throw new Exception("Too long");

            _firstName = value;
        }
    }
}

コントローラーの更新アクション メソッドには、次のコードがあります。

[HttpPost]
public ActionResult Update()
{
    var tm = new TestModel();
    if (ModelState.IsValid)
    {
        if (TryUpdateModel(tm))
        {
            // Save to the DB
        }
    }

    return View("Test", tm);
}

問題は、ビューのテキスト ボックスに 20 文字を超える値を入力すると、MVC がモデルにプロパティを設定しようとしないことを期待していることです (長すぎてモデルに収まらないため、例外がスローされます)。 DB 列)。実際にプロパティを設定しようとする前に、ModelState.IsValid テストによって停止されると思っていたでしょう。

ここで実際の ORM (LLBLGenPro) をシミュレートしていることに注意してください。これは、長さのあるデータベース列に対して生成されたプロパティに対して行うことです。長すぎる値を設定しようとすると、例外がスローされます。

LLBLGen のテンプレートを変更する以外に、この問題を解決するにはどうすればよいですか?

これは ASP.NET MVC の通常の動作ですか?

4

1 に答える 1

0

提供されているコードは、ビューからモデル インスタンスを受信せず、ur コードでクラスのインスタンスを作成しているため、
このコードを伝えることは不可能です。

var tm = new TestModel();   

Testmodel のインスタンスを作成しますが、投稿されたフォームから受け取った値にバインドされていません。あなたの行動は基本的に次のようになります

public ActionResult Update(TestModel model) 

これは、mvc が検証しようとするモデルのインスタンスです。
おそらく、コード全体 (ビューを含む) を投稿して他に何か不足がないか確認する必要がありますが、これまでに提供したコードでは、フォームの値がリポジトリで更新されることも、例外がスローされることもありません。 FirstName は null のままです。

于 2012-06-12T11:53:40.873 に答える