【发布时间】:2019-01-22 15:50:14
【问题描述】:
我有一些复选框和一个按钮(不在表单中)。
单击按钮时,我有一些 jQuery,我正在创建一个包含选中框的值并发布到控制器的 post 模型。
控制器然后创建视图模型,我想将用户重定向到正确的视图,将视图模型传递给视图。
jQuery:
$.ajax({
url: AppSettings.baseUrl + "BOM/getMultiBOM",
type: 'POST',
data: JSON.stringify(data)
});
控制器:
[HttpPost]
public ActionResult getMultiBOM(multiBOMPostModel multiBomsPostModel)
{
BOM bom = null;
foreach (int value in multiBomsPostModel.bomsArray)
{
bom = db.BOMs.Find(value);
}
BOMViewModel viewModel = getViewModel(bom, null);
return RedirectToAction("OpenMultiBOM", new { viewModel = viewModel, bom = bom });
}
public ActionResult OpenMultiBOM(BOMViewModel viewModel, BOM bom)
{
viewModel.projectModel = new ProjectViewModel
{
project = bom.Project
};
return View(viewModel);
}
可能有点乱。
我认为 jQuery 是必要的,可以将复选框值传递给控制器。
当我对返回视图的方法使用RedirectToAction 时,模型没有被传递,大概是因为它正在将模型作为查询字符串发送。
视图模型并不简单,它包含列表、IEnumerables 和嵌套模型。
任何人都可以在传递视图模型时提供最有效的重定向/返回视图的方法吗?
答案:我保留了 ajax 以将我的复选框值发布到控制器
$.ajax({
url: AppSettings.baseUrl + "BOM/getMultiBOM",
type: 'POST',
data: JSON.stringify(dataArr),
}).done(function (result) {
location.href = "/BOM/OpenMultiBOM";
});
在我的控制器中,我将发布的值分配给postModel,然后将它们存储在TempData 中。这里的关键是返回一个 Json 值,然后允许在客户端进行重定向。
public ActionResult getMultiBOM(multiBOMPostModel multiBOMPostModel)
{
TempData["BOMs"] = multiBOMPostModel;
return Json("success");
}
然后我有另一个 HttpGet 方法,该方法将在页面被 Ajax 结果重定向并将TempData 转换为对象后加载。
[HttpGet]
public ActionResult OpenMultiBOM(int? BomMarkupMessage = null)
{
var bomIds = TempData["BOMs"] as multiBOMPostModel;
}
【问题讨论】:
-
请同时显示
BOM和BOMViewModel类结构。请注意,您不能从 AJAX 执行RedirectToAction,请改用普通表单提交。 -
我在我的问题中使用了这个!
标签: c# jquery asp.net asp.net-mvc