8

現在、新しい ASP.NET MVC2 フレームワークを使用してアプリケーションを開発しています。当初、私は ASP.NET MVC1 でこのアプリケーションを書き始めましたが、基本的には MVC2 に更新しているだけです。

ここでの問題は、FormCollection オブジェクトと古い Typed オブジェクトの概念がよくわからないことです。

これは私の現在のコードです:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
    try
    {
        Member member = new Member();
        member.FirstName = collection["FirstName"];
        member.LastName = collection["LastName"];
        member.Address = collection["Address"];

        // ...

        return RedirectToAction("Details", new { id = member.id });
    }
    catch
    {
        return View("Error");
    }
}

これは、MVC1 アプリケーションのコードです。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Member member)
{
    try
    {
        memberRepository.Add(member);
        memberRepository.Save();

        return RedirectToAction("Details", new { id = member.id });
    }
    catch
    {
    }
    return View(new MemberFormViewModel(member, memberRepository));
}

MVC2 で FormCollection に切り替えることの利点は何ですか?さらに重要なことは、どのように適切に使用されるのですか?

4

2 に答える 2

11

v1 にも FormCollection オブジェクトがありました。ただし、型付きオブジェクトを使用する方がより好ましいです。したがって、すでにそれを行っている場合は、引き続き行ってください。

于 2010-01-28T16:06:25.247 に答える
0

FormCollection を使用すると、投稿データまたはクエリ文字列のキー/値を、文字列型を使用してコードで使用する値に手動で一致させることになります (文字列型のコードが生成されます)。代わりに、組み込みのモデル バインディングがこれを実行できます。フォームモデル、別名「型付きオブジェクト」を使用する場合。

FormCollection を使用すると、型付きオブジェクト モデル バインディングで使用するために設計された、モデル オブジェクトの便利なデータ注釈 (スラッシュ検証) 属性も使用できなくなる可能性があります。

さらに、controller.Request.Form に触れ始めると、単体テストがはるかに面倒になる可能性があります。HttpContextBase と HttpRequestBase をモックしてセットアップしなければならない場合があります。これは、そのモック リクエストの .Form プロパティが、テストで確認したい NameValueCollection を返すようにするためです。これを、次のような作業をモデル バインディングに任せることとは対照的です。

  // Arrange
  var myModel = new MyModel( Property1 = "value1", Property2 = "value2");
  // Act
  var myResult = myController.MyActionMethod(myModel);
  // Assert
  // whatever you want the outcome to be

要約すると、可能な限り FormCollection を使用しないことをお勧めします。

于 2012-01-12T20:30:58.987 に答える