2017-05-22 18 views
0

現在、データをロードしてグリッドに表示するために、いくつかのパラメータを選択してボタンをクリックするページがありますが、データを表示する機能はありませんページの読み込み(URLパラメータ経由)。必要なルーティング設定とアクションを追加しましたが、ページのレンダリングに問題があります。スタイルなしでPartialViewのみを表示します。ページ全体のパーシャルビュー(およびデータ)をレンダリングする

パーシャルビューだけでなく、ページ全体をレンダリングするにはどうすればよいですか?

以下は、私のビューとコントローラのための簡単なコードです。私は最終的に解決策を見つけた

ビュー/プレーニング/ Index.cshtml

@model PlaningTool.Web.Models.PlaningViewModel 
<div class="row"> 
    <div> 
     @using (Ajax.BeginForm("GetDataRows", 
      "Planing", 
      new AjaxOptions 
      { 
       HttpMethod = "Get", 
       UpdateTargetId = "gridPlaceholder", 
       LoadingElementId = "loadingIndicator" 
      })) 
     { 
      <!-- some comboboxes to select project and year --> 

      <input type="submit" value="Load data" /> 
     } 
    </div> 
</div> 

<div id="gridPlaceholder"> 
    <div id="loadingIndicator" style="display: none;"> 
     <img src="~/Content/images/loading-image.gif" /> 
    </div> 
</div> 

コントローラ/ PlaningController.cs

public partial class PlaningController : Controller 
{ 
    public virtual ActionResult Index() 
    { 
     return View(); 
    } 

    public virtual ActionResult Plan(long projectID, int year) 
    { 
     var viewModel = new PlaningViewModel 
      { 
       ProjectID = projectID, 
       Year = year 
      }; 

     // return GetDataRows(viewModel); 
     return RedirectToAction("GetDataRows", viewModel); 
    } 

    [RestoreModelStateFromTempData(typeof(PartialViewResult))] 
    public virtual PartialViewResult GetDataRows(PlaningViewModel viewModel) 
    { 
     // Load data from database with viewModel.ProjectID 
     // and viewModel.Year as parameters 
     [...] 

     var vm = new PlaningViewModel 
      { 
       // Set ViewModel for loaded data 
       [...] 
      }; 

     return PartialView("Shared/_PlaningViewModelRows", vm); 
    } 

    [...] 
} 
+0

あなたのAJAX通話に問題があるようです。正しいJSファイルを参照しているようにしてください。 AJAXファイルを使って、あなたはFull投稿をしていて、JS/CSSなどでレスポンス(あなたの部分的なビュー)をレンダリングしています。 – KevDevMan

答えて

0

。私はそれがこれを行うための最善の方法ではないと確信していますが、それは動作します。

Modelが既に設定されている場合は、PartialViewをレンダリングします。

<div id="gridPlaceholder"> 
    @{ 
     if (Model != null) 
     { 
      Html.RenderPartial("Shared/_PDataViewModelRows", Model); 
     } 
    } 

    <div id="loadingIndicator" style="display: none;"> 
     <img src="~/Content/kendo/Bootstrap/loading-image.gif"/> 
    </div> 
</div> 

そして、私のControllerに私はこれに変更したので、私のViewModelは独立してロードされると、私は新しいViewModelIndexの場合と同じように、私は単純に同じビューを返します。

public virtual ActionResult Plan(long projectID, int year) 
{ 
    var viewModel = new PlaningViewModel 
     { 
      ProjectID = projectID, 
      Year = year 
     }; 
    return View("Index", LoadViewModel(viewModel)); 
} 

public PlaningViewModel LoadViewModel(PlaningViewModel viewModel) 
{ 
    // Load data from database with viewModel.ProjectID 
    // and viewModel.Year as parameters 
    [...] 

    var vm = new PlaningViewModel 
     { 
      // Set ViewModel for loaded data 
      [...] 
     }; 

    return vm; 
} 
関連する問題