2016-05-24 5 views
0

同じコントローラ内の別のアクションにデータをポストしようとしています。私はいくつかのドロップダウン、テキストボックス、ダイナミックに生成されたdiv(タイル)を持っていますが、各divはクリック可能ですが、ユーザーがdiv(Tile)をクリックすると、ドロップダウンコントロールの値、テキストボックス値を取得するjavascript関数が呼び出されます。これで、同じデータを別のアクションに投稿する必要があります(actionMethod2)戻ってきます、どうすればいいですか?jsonオブジェクトをコントローラにポストして表示する

私はajax postメソッドを使用しようとしましたが、そのactionMethod2によって返されたビューに移動できません。

var searchModel = {}; 
    searchModel.StartDate = $('#dvSearchDateRange').attr('data-startDt'); 
    searchModel.EndDate = $('#dvSearchDateRange').attr('data-endDt'); 
    searchModel.Status = propertyName; 
    searchModel.StatusText = tileText; 
    searchModel.AgencyId = cascadOADdropdowns.selectedAgencyId; 
    searchModel.DeptId = cascadOADdropdowns.selectedDeptId; 
    searchModel.AgencyName = cascadOADdropdowns.selectedAgencyName; 
    searchModel.DeptName = cascadOADdropdowns.selectedDeptName; 
    $.ajax({ 
     url: referralSearchUrl, // /Home/ReferralsList' 
     type:"POST", 
     contentType: "application/json", 
     dataType: "json", 
     data: JSON.stringify(searchModel) 
    }); 

これは技術的に動作しますが、私が望むものではないthatsの、私は必要があります。...ここ

はjavascriptのある と私はシンプルなwindow.locationのを実行しようとしましたが、私はあまりにも値を投稿する必要があります(urlから呼び出した場合のように)アクションメソッドによって返された全体のビューを表示します。

HomeController: 
//this method provides data to dynamically generate divs. You can consider this as user's landing view(Page) 
    public ActionResult Index(DashboardSearchViewModel vm) 
    { 
     //VMs 
     UserInfoViewModel userInfoVM = MySession.GetSession<UserInfoViewModel>(Constants.USER_INFO); 
     LookupsViewModal lookupsVM = new LookupsViewModal(); 
     //DAL, BAL 
     DashboardBA dashboardBA = new DashboardBA(); 
     LookupsBA lookupsBA = new LookupsBA(); 

     vm.SearchStartDate = DateTime.Now.AddMonths(-dateRange); 
     vm.SearchEndDate = DateTime.Now; 
     lookupsVM.AgencyId = vm.AgencyID = userInfoVM.UserInforFromES.AgencyID; 
     lookupsVM.DeptId = vm.DepartmentID = userInfoVM.UserInforFromES.DeptID; 
     lookupsVM.OrgId = userInfoVM.UserInforFromES.OrgID; 
     lookupsVM.logonId = userInfoVM.LogonID; 
     vm.LoggedInUserInformation = userInfoVM; 
     vm = dashboardBA.GetDashboardSummary(vm); 

     lookupsVM = lookupsBA.GetLookups(lookupsVM); 

     TempData[Constants.LOOKUPS] = lookupsVM; 
     return View(vm); 
    } 

    /*This is the action method i need to post values to and display returned view.Its like submitting data by user and redirect user to different view (by server)*/ 

    public ActionResult ReferralsList(ReferralSearchFilersViewModel searchValues) 
    { 
     return View(vm); 
    } 
+2

アヤックスの全体のポイントは、同じページにとどまることです。ユーザーを別のview_に_redirectする場合は、ajaxを使用しないでください。ちょうどnotmal submitをしてください。 –

+0

@Stephen:そうです、私はAjaxを使うべきではありません。しかし、私はjavascriptを使用して表示されたページでいくつかのデータを収集し、コントローラに送信する必要があり、コントローラは別のビューにリダイレクトされます。今私は、ここでフォームを使用していないことをどうやって行うのか分かりません.... – venu

+0

しかし、単に「

」タグを追加しないでください。 –

答えて

0

PartialViewResultを返すようにアクションを変更してください。部分的な剃刀の表示で@{ Layout = null }を設定する必要があるかもしれません。

success JQuery ajaxコールのコールバックでは、ページの一部に<div>の部分を挿入します。例えば

$.ajax({ 
    url: referralSearchUrl, // /Home/ReferralsList' 
    type:"POST", 
    contentType: "application/json", 
    dataType: "json", 
    data: JSON.stringify(searchModel), 
    success: function(partial) { 
     $('#SomeDiv').html(partial); 
    } 
}); 
+0

私たちの場合、レイアウトを含む完全なビューを表示する必要があります。返されるビューは、さまざまなレイアウトとJavaScriptファイルリファレンスといくつかのイメージの束を使用するためです。 – venu

+0

返されたビューを「親」ビューに埋め込んでいますか?アクションを常にActionResult(通常のビュー)を返すように保つことができ、成功コールバックに渡されたpartialパラメータのすべてのhtmlを受け取ることができます。 –

関連する問題