2016-05-04 15 views
0

私は最近、ASP.NET MVC内で教育を終えました。私はいくつかのガイドラインと良いアドバイスが必要です。ビューモデルの代わりにJSON

私はいくつかのモデルからのデータが必要な場合は、私はView Modelsを構築するために学んできたが、最近私の代わりにView ModelsのそれはJSONオブジェクトを使用してViewにモデルとしてオブジェクトを返す方が良いでしょうか、単にからすべてのデータを取得することを聞きましたControllerJSONオブジェクトは、のデータをに呼び出し、jQueryのデータをHTMLに表示します。

これは、一般的なView Modelsではなく、URLにPOST/GETリクエストを追加したページをリフレッシュするための最良の方法ですか?

Controllerでは、JSONオブジェクトを作成し、Modelのリストのようなデータで埋めていますか?それはどのように機能しますか?

+2

これに対する答えは、*それに依存します。場合によってはクライアント側をバインドすることが有用な場合もあります。このテーマについて書かれているものは全部あります。 – Liam

+1

さらに、これら2つのアプローチを組み合わせることもできます。 – eternity

+0

@Liam OK、他の開発者がこのテーマについてどのように考えているか聞いてみたいと思っています。 。 –

答えて

-1

mvc controllerの代わりにweb api controllerを使用してください。

Mvcコントローラは、特に指定しない限り、レンダリングビューを返します。 循環参照はdtosを持つ必要があるため、エンティティフレームワークでオブジェクトを返すことはできません。

ただし、web apiコントローラはこれらの操作をoutで行います。プラスあなたはquery string parameterを作成することができますし、あなたのjsonsを受け取るでしょう

+1

これは当てはまりません。MVCコントローラが行うことができないWeb APIのコントローラは、それほど多くありません。彼らは基本的に同じ技術をボンネットの下で使います。 *循環参照のため、エンティティフレームワークでオブジェクトを返すことはできません。これらの問題がある場合は、EFが正しく設定されていないことをお勧めします。 – Liam

0

私は実際に必要に応じています。実際、あなたの考えはすべて正しいものであり、文脈の必要に応じて使用することができます。

たとえば、複雑なCRUD操作を行う必要がある場合は、ビューモデルだけを使用してフォームにバインドすることができます。より複雑な構造が必要な場合は、複数のビューモデルを含むコンポジットビューモデルを作成し、デフォルトのモデル動作を引き続き使用できます。 さらに、ViewBag/ViewDataディクショナリオブジェクトを使用して、データをビューに渡すことができます。

あなたは非同期ニーズが必要な場合は、AJAXを(取得/ポスト)

0

私は古い学校かもしれませんが呼び出されますが、私は可能な限りview modelsを使用しようと使用することができます。私は正常にやっていることは私のコントローラのアクションメソッドでビューモデルを投入してから表示するには、このビューモデルに渡すことです:

public async Task<ActionResult> Details(int brandId) 
{ 
    BrandViewModel model = await brandTask.DetailsAsync(brandId); 
    if (model == null) 
    { 
      throw new HttpException(404, "404"); 
    } 

    return View(model); 
} 

私は最初のページをロードして、特定のコントロールを移入する必要があります時間があります。データはJSON形式で返されます。これは、すべてはあなたのシナリオで達成するために必要なものへとダウン

public ActionResult GetApplicationNotes(DataTableParameterViewModel parameterViewModel, int id) 
{ 
    IEnumerable<Note> notes = noteService.FindAllByApplicationId(id); 

    var result = 
      from note 
      in notes 
      orderby note.Id descending 
      select new[] 
      { 
       note.Body, 
       note.CreatedDate.FormatDate() 
      }; 

    return Json(new 
    { 
      sEcho = parameterViewModel.sEcho, 
      iTotalRecords = notes.Count(), 
      iTotalDisplayRecords = notes.Count(), 
      aaData = result 
    }, 
    JsonRequestBehavior.AllowGet); 
} 

:しばらくは戻って私は、フォームが読み込まれた後、私はJSONデータとdatatableを埋めるために必要なプロジェクトに取り組みました。私が何か面白いことをする必要がなければ、私は常に最初にビューモデルを使用します。 Webページの特定の部分を更新する必要がある場合は、AJAX呼び出しを行い、JSON形式のデータを返します。

関連する問題