2

以下を達成するための最も適切な方法についてのガイダンスをいただければ幸いです。

私の MVC アプリケーションには、2 つの個別のリスト (人、場所) を表示するメイン ビュー (デスクトップ) があります。ユーザーがページ全体を更新することなく、各リストを個別に更新できるようにしたいと考えています。

そこで、「Index」ビューをロードしてモデル「DesktopViewModel」を渡すコントローラーを作成しました。

DesktopViewModel

public IEnumerable<Person> GetPersons()
{
    // Retrieve Person data from database and return to caller
}

public IEnumerable<Place> GetPlaces()
{
    // Retrieve Place data from database and return to caller
}

次のビューを作成しました:
Views\Desktop\Index.cshtml
Views\Desktop\_PeoplePartial.cshtml
Views\Desktop\_PlacesPartial.cshtml

部分ビューは、インデックス ビューに含まれます。

そこで、私が今やりたいことは、各部分ビューに「更新」ボタンを追加することです。その更新ボタンが押されると、ページは呼び出しを行う必要があります。たとえば、厳密に型指定された Person オブジェクトの列挙可能なリストを取得するために Model.GetPersons を呼び出します。次に、Razor 構文を使用して、各 Person オブジェクトのプロパティをテーブルに表示します。 .

たぶん、私はこれについて完全に間違った方法で進んでいます。最初の要件 (1 ページ、2 つのリスト、独立した更新) はかなり単純で、おそらく一般的なシナリオのように見えるので、従うべきパターンに関するアドバイスをいただければ幸いです。

4

3 に答える 3

1

ViewModel は、データベースからアイテムを取得する責任を負うべきではありません。代わりに、Controller は ViewModel を介してビューにアイテムを渡す必要があります。次に例を示します。

ビューモデル

public class DesktopViewModel
{
    public IEnumerable<Person> Persons { get; set; }
    public IEnumerable<Place> Places { get; set; }
}

コントローラー(一部)

public ActionResult Index()
{
    // get your data
    var model = new DesktopViewModel();
    // set your data to the ViewModel
}

次に、ビューで、Model.Persons を介して人にアクセスできます。

編集:

部分ビューを再利用する予定がない限り、2 つの部分ビューを使用せずにインデックス ビューですべてを行うこともできます。

于 2013-10-30T13:30:55.027 に答える
0

コントローラーは、部分的なビューではなく、おそらく JSON を返す必要があります。

public JsonResult GetPersons()
{
    IList<Person> people = GetPeople();
    return Json(people);
}

そして、JavaScript で次のようなことができます (jQuery を使用していると仮定します)。

$('#refresh-person-button').on('click', function() {
    $.getJSON('/controller/getpersons', function(res) {
        $.each(res, function() {
            $('#person-container ul').append('<li>' + res.FirstName + '</li>');
        });
    });
});

そして最後に、HTML で:

<div id="person-container">
    <ul></ul>
</div>

これは実際には説明のためのものです。HTML に手動で .append() を追加するのではなく、おそらく JavaScript テンプレート システムを使用するか、サイトの残りの部分で同様のことを行う場合は、knockout.js や backbone.js などを使用することをお勧めします。 /アプリ/ページ

于 2013-10-30T13:25:33.653 に答える