我有一些复选框和一个按钮(不在表单中)
单击按钮时,我有一些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然后返回视图时,模型未通过传递,大概是因为它将模型作为查询字符串发送。
viewmodel不是简单的,它包含列表,即数字和嵌套模型。
任何人都可以通过传递视图模型的同时,以最有效的方式重定向/返回视图吗?
我保留了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;
}
答案 0 :(得分:1)
我可以将viewmodel
服务器端持久化,也许保留在会话变量中,或者可能保留为TempData
(TempData通常只保留到下一个请求),然后将会话变量的密钥传递给如果是会话变量,则是第二个控制器;如果是TempData,则直接在视图中使用TempData。这样可以避免整个对象来回传递多次。
答案 1 :(得分:0)
所以我之前做过的方式是在DOM中有一个空的div。
<div id="partialViewContent">
<!-- Content will be loaded later. -->
</div>
如果您有默认视图,则需要使用以下代码段将其设置为从URI加载。
$("#partialViewContent").load("Controller/Action",
function (response, status) {
if (status !== "success") {
console.log("An error has occured when attempting to load partial view.");
}
});
当您通过JQUERY发布到控制器操作时,请使该操作返回模型的局部视图。 (假设模型与每个局部视图相关。)
然后,当ajax完成时,用POST响应替换partialViewContent中的内容。