1

UpdateModel()アプリを ASP.NET MVC 1 から MVC 3 に変換していますが、フォームを送信するときに呼び出すときに問題が発生しました。

ここに私のモデルクラスがあります:

public class TestModel
{
    public string Name { get; set; }
    public string Description { get; set; }
    public int Age { get; set; }
    public int? SubValue { get; set; }
    public int AgeSub
    {
        get
        {
            return SubValue.Value - Age;
        }
    }
}

そして私のコントローラーで:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult TestModelSave()
{
    TestModel tm = new TestModel();

    try
    {
        UpdateModel(tm);

        if (ModelState.IsValid)
        {
            return RedirectToAction("TestModelEdit");
        }
    }
    catch
    {
    }

    return View("TestModelEdit", tm);
}

送信時に SubValue を null のままにすると、MVC 1 で正常に動作します。しかし、MVC 3 では、呼び出すと、TestModel クラスUpdateModel(tm)の行で例外がスローされます。return SubValue.Value - Age;

に行って変更SubValue.ValueすることもできますSubValue.GetValueOrDefault()が、そうする必要はありません。MVC のバージョン間でこの変更が行われたのはなぜですか?

4

4 に答える 4

0

オブジェクトのプロパティにアクセスする場合、オブジェクトを null にすることはできません。したがって、最善の方法は、オブジェクトが null でないかどうかを確認してから、プロパティへのアクセスを試みることです。同じコードが MVC1 で例外なく機能することは非常に疑わしいです (機能している場合、MVC1 で得られる値は何ですか)。

あなたの場合AgeSub、例外がスローされるのを避けるためにこれを行うことができます。

public int AgeSub
{
   get
   {
       return SubValue.HasValue ? SubValue.Value - Age : 0;
   }
}
于 2012-06-06T16:54:17.790 に答える
0

あなたのコードが MVC1 で動作した場合 (そして、それがどのようになるのか理解できません)、それはただの運です。そのようなnullable int の値にアクセスしようとすると、例外をスローする必要があります。

コードが壊れているので、修正する必要があります。以前は機能していたと文句を言わないでください。

于 2012-06-06T15:50:22.687 に答える