0

私はMVVMを使用したWPFプログラミングから来たので、ASP.NETでMVCを使用したのはこれが初めてです。

私がやろうとしていたのは、このモデルを表示することです。

public class MultipleChoiceQuestion : Question
{
    public string QuestionText
    public List<MultipleChoiceAnswer> PossibleAnswers { get; set; }
}

public class MultipleChoiceAnswer
{
    public string Text { get; set; }
    public string UrlImage { get; set; }
    public bool IsCorrect { get; set; }
}

ご覧のとおり、私はを持っておりList<T>、ここがRadioButtonsで表示しようとしている場所です。このサイトでいくつかのデータを検索していたところ、主にラジオボタンでViewModelsが使用されていることがわかりました。

ASP.NETMVC用にRadioButtonListFor<T>を実装している人はいますか?

ここでViewModelsを使用する目的は何ですか?そして、ラジオボタンで私のリストを表示するにはどうすればよいですか?少し紛らわしいです。

4

1 に答える 1

5

人々が ViewModel を使用する理由については、多くの答えがあります。通常、最も単純な理由は、ビューが必要とするデータがビジネス モデルのデータとは異なることです。例えば:

アプリケーションで、ユーザーがイメージをアップロードし、そのイメージをAzure Blob Storageなどのクラウド ストレージに保存できるとします。BLOB ストレージに保存されているファイルには、次の形式の URL を介してアクセスできます。https://account.blob.core.windows.net/filename.png

データベース モデルは次のようになります。

public class Image
{ 
    public int Id { get; set; }
    public string FileName { get; set; }
}

ここでは、画像のファイル名を保存しています。完全な URL を保存するのはスペースの無駄であり、データを別の場所に移動することは非常に困難です。

ただし、画像を表示する場合、ビューにはその完全な URL が必要です。ここで、ViewModel が役立ちます。(ViewModel で URL をハードコーディングしないようにする方法については、以下の注を参照してください)。

public class ImageViewModel
{
    public int Id { get; set; }
    public string FileName { get; set; }

    public string Url 
    {
        get { return "https://account.blob.core.windows.net/" + FileName; }
    }
}

これをビューに渡すことで、この画像を正しく表示するために必要なものがすべて揃っています。

<h3>@Model.FileName</h3>
<img src="@Model.Url" alt="@Model.FileName"/>

ストレージ プロバイダーを Amazon S3 ( https://account.s3.amazonaws.com/filename.png ) などに移動した場合、URL を 1 か所で更新するだけで済み、ビューはまったく影響を受けません。

補足として、 AutoMapperをさらに単純化する方法として検討し、ViewModel で URL をハードコーディングしないようにすることをお勧めします。AutoMapper を使用すると、デフォルト値の設定、オブジェクトのフラット化などを含む、モデル -> ビューモデルのマッピングのルールを定義できます。

于 2013-01-14T01:34:09.340 に答える