1

私は ASP.net MVC に取り組んでいます。ここで、M は単に"Model"を表します。データベースにマップできるモデル。

通常、私は View を Model に強くバインドします。

しかし、最近、単なるモデルとは異なるビューモデルについて聞いていました。

ViewModel はMVCまたはMVVM( ModelViewViewModel) の一部ですか?

ViewModel と Model の基本的な違いは何ですか。MVCでの作業方法として、小さな例を挙げたいと思います:

私の見解:

<% using (Ajax.BeginForm("TestAjax", "Reviewer", new AjaxOptions { OnSuccess = "Callback", OnFailure = "Failed" }))
   { %>
<table align="center">
    <tr>
        <td class="tdCol1Align">
            <label>
                Number1</label>
        </td>
        <td class="tdCol2Align">
            <%=Html.TextBoxFor(Model => Model.number1)%>
        </td>
    </tr>
    <tr>
        <td class="tdCol1Align">
            <label>
                Number2</label>
        </td>
        <td class="tdCol2Align">
            <%=Html.TextBoxFor(Model => Model.number2)%>
        </td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <input type="submit" value="Add" class="button" />
        </td>
    </tr>
</table>
<%
    }
%>

私のモデル:

public class AddModel
    {
        public int number1
        {
            get;
            set;
        }

        public int number2
        {
            get;
            set;
        }

    }

そして最後に私のコントローラー

   [HttpPost]
        public JsonResult TestAjax(AddModel model)
        {

            int iSum = model.number1 + model.number2;
            return Json(new { Sum = iSum });

        }

それでおしまい 。ViewModelこれがどこで絵になるのか理解できません

以下について私を明確にしてください:

1.ViewModelとModelの基本的な違い

2.View Model は MVC または MVVM アーキテクチャの一部ですか?

  1. ViewModels を使用する場合に上記の例を実装するにはどうすればよいですか?

  2. ビュー モデルが MVC の一部である場合、アプリケーションのフォルダー構造のどこに表示されますか?

4

4 に答える 4

1

MVC のビュー モデルは、MVVM のビュー モデルと同じではありません。

MVC の場合、ビュー モデルは、1 つまたは複数のビューに固有の一種のモデルです。通常「モデル」と呼ばれるものはエンティティであり、ビジネス層とデータ アクセス層でも使用されます。しかし、多くの場合、ビューには特定のニーズがあるため、ユーザーにデータを表示するのには適していません。いくつかのエンティティを結合し、いくつかの変換を行い、必要なデータのみを含むビュー モデルを作成する必要がある場合があります。ビューは、データを表示する準備が整ったビュー モデルを取得する必要があり、追加のプロセスを実行する必要はありません。

于 2013-10-25T11:37:37.967 に答える
1

MVC のモデルは、データベース内の 1 つ (または複数) のテーブルを表す単なるクラス (POCO) ではありません。レイヤーです。これには、アプリケーションのすべてのビジネス、検証、およびデータ アクセス ロジックが含まれています。また、ドメイン モデルで構成され、これらはデータベース テーブルを表します。

アプリケーションが成長し、より柔軟で複雑なビューが必要になった場合、通常、ドメイン モデルはビューでの使用に適していません。特に、データベース検証とは異なる検証属性を追加する場合、またはビューに複数のドメイン モデルのプロパティが含まれる場合。たとえば、ログイン ビューを考えてみましょう。Userここではドメイン モデルを使用するのではなく、ビューに必要なプロパティだけを含む特殊なビュー モデルを使用します。

public class LoginModel
{
    [Required]
    public string Username { get; set; }    

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    public bool RememberMe  { get; set; }
}
于 2013-10-25T11:43:39.993 に答える
1

簡単な説明は、

モデル:データベースから値を読み取るためのプロパティを定義できるように定義されています(データアクセスレイヤーと同様)

View Model : View(UI) に値を読み書きするためのプロパティを定義できるように定義されています (ビジネス ロジック レイヤーと同様)。

編集:

MVVM パターンを使用する場合は、ソリューション エクスプローラーで ViewModel という名前のフォルダーを手動で作成しますが、MVC パターンを使用する場合は、ソリューション エクスプローラーでモデルが自動的に作成されます。

モデルフォルダーにはデータベース関連のクラスがあり(データベースへのデータの読み取りおよび書き込みのためのいくつかのメソッドを含めるため)、ビューモデルにはビジネス論理およびUI関連のクラス(ビュー(UI)で値の読み取りおよび書き込みのためのいくつかのプロパティを含めるため)があり、ビューには私たちのhtmlまたはMVVMパターンの任意のページ

モデルにはデータベースクラスがあり、ビジネス論理およびUI関連のクラスがあり、ビューにはhtmlまたはMVCパターンの任意のページがあります

于 2013-10-25T11:47:22.197 に答える