将json对象发布到控制器并获取视图

时间:2016-05-24 16:05:27

标签: asp.net asp.net-mvc asp.net-mvc-4 c#-4.0 devextreme

我正在尝试将数据发布到同一控制器中的其他操作。所有这些天我都使用表单提交或带有查询参数的url,我目前的情况不同:

要求:在其中一个视图中我们有一些下拉列表,文本框和动态生成的div(Tiles),每个div都是可点击的,现在当用户点击div(Tile)时,调用javascript函数来获取下拉控件&# 39; s值,文本框值,现在我需要将该数据发布到同一个控制器中的不同动作(比如actionMethod2)并显示它返回的任何视图,我该怎么做?

我尝试使用ajax post方法,但意识到我无法移动到该actionMethod2返回的视图。 我试图做一个简单的window.location,但我也需要发布值...

这是javascript:

    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)
    });

这在技术上有效,但这不是我想要的,我需要显示动作方法返回的整个视图(就像你从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);
    }

1 个答案:

答案 0 :(得分:0)

更改您的操作以返回PartialViewResult。您可能需要在部分剃刀视图中设置@{ Layout = null }

在JQuery ajax调用的success回调中,在页面上填充部分<div>的部分结果。 e.g。

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