【发布时间】:2016-09-21 23:13:24
【问题描述】:
我正在尝试将数据发布到同一控制器中的不同操作。这些天我使用表单提交或带有查询参数的 url,我现在的情况是不同的:
要求:在其中一个视图中,我们有一些下拉菜单、文本框和动态生成的 div(Tiles),每个 div 都是可点击的,现在当用户单击 div(Tile)时,将调用 javascript 函数来获取下拉控件的值,文本框值,现在我需要将该数据发布到同一个控制器中的不同操作(比如说 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)
});
这在技术上是可行的,但这不是我想要的,我需要显示 action 方法返回的整个视图(就像你从 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);
}
【问题讨论】:
-
ajax 的全部意义在于保持在同一页面上。如果您想将用户重定向到不同的视图,请不要使用 ajax。只需进行正常提交即可。
-
@Stephen:你说得对,我不应该使用 Ajax。但是我需要在使用 javascript 显示的页面上收集一些数据并将其提交给控制器,然后控制器将我重定向到不同的视图。现在我不确定我们是如何做到的,我们在这里没有使用任何形式....
-
但是为什么不添加
<form>标签呢? -
我正在显示的内容是使用 jquery 调用和一些前端工具动态显示的。当用户单击其中一个 div 时,我需要获取一些值(基于用户单击的 div)并将它们发布到服务器,如果服务器端一切正常,则操作方法将重定向其他,它将发送错误消息.
-
您对此的看法:您发送 ajax 请求,如果它完成且没有错误,则将用户重定向到另一个视图(类似于 window.location = '/controller/action' 之类的东西)。否则你会向用户显示一些错误?
标签: asp.net asp.net-mvc asp.net-mvc-4 c#-4.0 devextreme