2

私は現在、「作成」またはデータベースに入力された日付に基づいて 10 本の映画のリストを表示するホームページを持つアプリケーションを持っています。また、各映画の評価に基づいてトップ 10 の映画のリストも表示したいと思います。別のモデルを渡すか、現在の ViewModel を変更してこれを行う方法はありますか? これが私のホームコントローラーのインデックスセクションです。

    public ActionResult Index()
    {
        var model =
            _db.Movies
                .OrderByDescending(m => m.DateEntered)
                .Take(10)
                .Select(m => new MovieListViewModel 
                {
                    Id = m.Id,
                    Title = m.Title,
                    Genre = m.Genre,
                    ReleaseDate =  m.ReleaseDate,
                    CountOfReviews = m.Reviews.Count()
                });

        return View(model);

    }

そして、渡される ViewModel は次のとおりです。

public class MovieListViewModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Genre { get; set; }

    [Display(Name="Year Released")]
    public DateTime ReleaseDate { get; set; }
    public int CountOfReviews { get; set; }
}
4

5 に答える 5

7

両方のリストを含むモデルを作成します。

public class MovieListViewModel
{
  public List<MovieModel> Top10ByCreated { get; set; }
  public List<MovieModel> Top10ByRating { get; set; }
}

public class MovieModel
{
  public int Id { get; set; }
  public string Title { get; set; }
  public string Genre { get; set; }

  [Display(Name="Year Released")]
  public DateTime ReleaseDate { get; set; }
  public int CountOfReviews { get; set; }
}

次に、コントローラーで:

var model = new MovieListViewModel();

model.Top10ByCreated = ...
model.Top10ByRating = ...

return View(model);

ビューではMovieListViewModel、 をモデルとして使用し、必要に応じて 2 つのリストを使用します。

于 2013-05-24T19:05:02.900 に答える
2

2 つのリストに 2 つのプロパティを使用して、別のビューモデルを作成するだけです。

public class MovieIndexViewModel
{
    public IEnumerable<MovieListViewModel> TopTenByDate { get; set; }
    public IEnumerable<MovieListViewModel> TopTenByRating { get; set; }
}

コントローラーで、このビューモデルを作成し、2 つのリストを渡すことができます。

public ActionResult Index()
    {
        var vm = new MovieIndexViewModel();

        vm.TopTenByDate = ....;
        vm.TomTenByRating = ...;

        return View(vm );

    }
于 2013-05-24T19:06:44.480 に答える
1

2 つの結果セットを含む単一のビュー モデルを構成できます。次に、コントローラーは親の型をインスタンス化し、必要に応じて子のコレクションを設定します。

public sealed class HomeViewModel{
    public MovieListViewModel TopTenByRating { get; set; }
    public MovieListViewModel TopTenByDate { get; set; }
}

public ActionResult Index()
{
    var model = new HomeViewModel();

    model.TopTenByDate =
        _db.Movies
            .OrderByDescending(m => m.DateEntered)
            .Take(10)
            .Select(m => new MovieListViewModel 
            {
                Id = m.Id,
                Title = m.Title,
                Genre = m.Genre,
                ReleaseDate =  m.ReleaseDate,
                CountOfReviews = m.Reviews.Count()
            });

    model.TopTenByRating = // something else

    return View(model);
}

より複雑なシナリオでは、(すべてのロジックをアクション メソッドに含めるよりも) ビュー モデルの設定を担当する専用のコンポーザーを好みます。

このような単純なシナリオでは、コントローラーで設定するのが最も簡単な方法です。クエリ ロジックを再利用する必要がある場合は、ヘルパー クラスに抽象化することを検討してください。

于 2013-05-24T19:05:22.843 に答える
0

誰でも使用できるさまざまなオプションがあります

ViewModel を使用する

ビューモデルの場合、クラスを作成する必要があり、このクラスでは、すべてのモデルをこのクラスのプロパティとして定義します.2 つのクラスがあります。

public class EmployeeDetails
{
    [Required]
    [Display(Name = "Name")]
    public string Name { get; set; }

}

public class Employee
{
    public int Id { get; set; }
}

ここにビューモデルがあります

public class ViewModel
{
    public Employee emp { get; set; }
    public EmployeeDetails empdet{ get; set; }
}

今コントローラーであなたはこのようにします

public ActionResult About()
{
        ViewModel vm = new ViewModel();
        vm.emp = new Employee();
        vm.empdet = new EmployeeDetails();
        return View(vm);
}

そして、ビューでは、このように受け取ります

@model ViewModel

タプルを使う

タプルはさまざまなタイプを格納するために使用されます。必要なクラス オブジェクトをその中に格納し、ビューに渡すことができます。

コントローラ内

Tuple<int, string> tuple = new Tuple<int, string>(1, "Hello world");
return View(tuple);

ビューでは、このように受け取ります

@model Tuple<int,string>
于 2014-12-29T09:08:19.067 に答える