2016-12-22 45 views
0

インデックスビューで部分的なビューを更新する際にいくつか問題があります。基本的に、クリックに基づいて、私は情報を更新したいと思います。ボタンのクリックで@ Html.action()をシミュレートする必要があります

//controller 
    public ActionResult Index() 
    { 
     var filteredObservations = getFilteredObservationSessions().ToList(); 
     var observationManagementVm = new ObservationManagementVM(filteredObservations); 

     return View(observationManagementVm); 
    } 

    public ActionResult indexPagedSummaries(int? page, List<ObservationSessionModel> data) 
    { 
     var alreadyFilteredObservations = data; 
     int PageSize = 10; 
     int PageNumber = (page ?? 1); 

     return PartialView(alreadyFilteredObservations.ToPagedList(PageNumber, PageSize)); 
    } 

私の主なビュー

//index.cshtml 
@model AF.Web.ViewModels.ObservationManagementVM 
.... 
<div id="testsim"> 
    @Html.Action("indexPagedSummaries", new { data = Model.ObservationSessions }) 
</div> 
<input id="new-view" value="Sessions" type="button" /> 

<script> 
$("#new-view").click(function() { 
    $.ajax({ 
    type: "GET", 
    data: { data: "@Model.FeedBackSessions" }, 
    url: '@Url.Action("indexPagedSummaries")', 
    cache: false, 
    async: true, 
    success: function (result) { 
    console.log(result); 
     $('#testsim').html(result); 
     $('#testsim').show(); 
     } 
    }); 
}); 
</script> 
.... 

そして、私の部分図

//indexPagedSummaries.cshtml 
@model PagedList.IPagedList<AF.Services.Observations.ObservationSessionModel> 
@using (Html.BeginForm("indexPagedSummaries")) 
{ 

    <ol class="vList vList_md js-filterItems"> 
     @foreach (var item in Model) 
     { 
      @Html.DisplayFor(modelItem => item) 
     } 
    </ol> 
    <div> 
     Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount 

     @Html.PagedListPager(Model, page => Url.Action("Index", 
           new { page })) 
    </div> 
} 

Html.Action()私は完全に欲しいものを返しますが、できていないようですボタンのクリックによってトリガされます。

私はエラーは表示されませんが、URLはデータを返すことはありません。データを渡さずにObservation/indexPagedSummary URLを実行しようとすると、System.ArgumentNullExceptionエラーが発生するので、何かがビューモデルに転送されていると仮定しています。どんな助けでも大歓迎です。

答えて

1

はあなたのコードを実行していないが、私はあなたに@ Url.Action

メインビューと一緒にデータ送信されていないので、それがあると信じて:それは私が持っている問題が解決しない場合は

//index.cshtml 
@model AF.Web.ViewModels.ObservationManagementVM 
.... 
<div id="testsim"> 
    @Html.Action("indexPagedSummaries", new { data = Model.ObservationSessions }) 
</div> 
<input id="new-view" value="Sessions" type="button" /> 

<script> 
$("#new-view").click(function() { 
    $.ajax({ 
    type: "GET", 
    data: { data: "@Model.FeedBackSessions" }, 
    url: '@Url.Action("indexPagedSummaries", "[Controller Name]", new { data = Model.ObservationSessions})', 
    cache: false, 
    async: true, 
    success: function (result) { 
    console.log(result); 
     $('#testsim').html(result); 
     $('#testsim').show(); 
     } 
    }); 
}); 
</script> 

をコンテンツタイプの不一致やデータ型の不一致があったときに問題が発生しました。それらをあなたのAjaxリクエストに追加する必要があるかもしれません。

+0

こんにちはカレブ、あなたのコメントをありがとう。残念ながら、変更を加えても結果には影響はありません - 私はまだ同じ応答を得ています。私は生成されたURLをチェックし、実際に同じURLを作成するように見えます。それが役立つ場合、http:// localhost:60985/Observation/indexPagedSummaries?data = System.Collections.Generic.List%601%5BAF.Services.Observations.ObservationSessionModel%5D&data = System.Collections.Generic.List%601%5BAF。 Services.Observations.ObservationSessionModel%5D&_ = 1482453264080 –

+0

URLにDataが2回あるため、@ Model.FeedBackSessionsと@ Model.ObservationSessionsの違いは何ですか? –

+0

フィードバックセッションは、観測セッションのサブセットです。新しいビューとフィルタリングされたデータは、部分ビューに渡したいものです。 –

0
はこれにあなたのAjaxのデータ行を変更し

data: { data: JSON.stringify(@Model.FeedBackSessions) }, 

をあなたはまた、AJAXにこれらの行を追加する必要があります。

dataType: 'json', 
contentType: 'application/json; charset=utf-8', 

あなたが現在その上で、あなたのコメントの一つで見ることができますURLの内容ではなく、リストオブジェクトの説明でURLが形成されています。

http://localhost:60985/Observation/indexPagedSummariesデータ= System.Collections.Generic.List% 601パーセント5BAF.Services.Observations.ObservationSessionModel%5D &データ= System.Collections.Generic.List%601パーセント5BAF.Services.Observations.ObservationSessionModel%5D & _ = 1482453264080

もっと良い方法があるかどうかはわかりませんが、投稿する前にモデルデータをJavascriptに手動で取得する必要があります。

例:

<script> 
    var temp = []; 

    @foreach (var item in Model.FeedBackSessions){ 
     @:temp.push(@item); 
    } 
</script> 

、その後data: { data: JSON.stringify(temp) },

関連する問題