我正在努力实现以下目标,我有一个页面,其中有一个用户记录呼叫,该用户需要输入各种字段并从多个下拉列表中进行选择,然后我需要将该数据(通过JQuery或控制器)发布到另一个页面,用户可以在其中查看输入的数据并决定是否提交。
我已经来回走了很久了,试图弄清楚如何将cshtml中的数据发布到我的控制器,然后重定向到具有持久数据的另一个页面。
我试图通过JQuery和/或控制器进行重定向,但似乎无法使其中一个工作。
下面的代码摘录:
cshtml:
$.ajax({
url: dir + '/Submit/',
async: true,
type: 'POST',
data: JSON.stringify(callData),
contentType: 'application/json; charset=utf-8',
complete: function () { },
success: function (data) {
}
})
控制器:
[HttpPost]
public ActionResult Submit(SupportCallModel callData)
{
SupportCallModel newData = new SupportCallModel();
newData.SupportCallID = 1;
newData.CallTypeID = callData.CallTypeID;
newData.TroubleShooting = callData.TroubleShooting;
newData.EmailRequest = callData.EmailRequest;
newData.MailDate = callData.MailDate;
newData.FSEOnSite = callData.FSEOnSite;
newData.FSEEmployeeID = callData.FSEEmployeeID;
newData.CallCategory = callData.CallCategory;
newData.CallType = callData.CallType;
newData.CallItem = callData.CallItem;
newData.Summary = callData.Summary;
newData.Description = callData.Description;
newData.ExternalReference = callData.ExternalReference;
newData.CallStatusID = callData.CallStatusID;
newData.CallPriorityID = callData.CallPriorityID;
newData.CallCoEmployeeID = callData.CallCoEmployeeID;
return RedirectToAction("Verify", newData);
}
public ActionResult Verify(SupportCallModel postData)
{
return View(postData);
}
最佳答案
使用ajax是没有意义的,因为ajax调用会停留在同一页面上(return RedirectToAction("Verify", newData);
被忽略)。您可以正常提交。假设在视图中渲染SupportCallModel
的所有必需输入,则它将回发。我建议你包括
[HttpPost]
public ActionResult Submit(SupportCallModel callData)
{
if (!ModelState.IsValid)
{
return View(callData);
}
...
如果模型包含验证错误,则在方法顶部。
然后,根据
SupportCallModel
的属性创建一个callData
的新实例,这似乎也毫无意义(为什么不仅仅传递callData
而不是newData
?)如果
SupportCallModel
仅包含值类型的属性,则可以使用return RedirectToAction("Verify", newData);
或return RedirectToAction("Verify", callData);
。在内部,将根据每个属性的名称和值创建一个RouteValueDictionary
,并且postData
将在Verify()
方法中正确绑定。但是,如果任何属性是复杂类型或集合,则这些属性的绑定将失败。在这种情况下,您需要持久化模型,以便可以在Verify
方法中对其进行检索。我的建议是保留到数据库(一个单独的表或一个包含指示未决状态的字段的现有表),但是您可以使用Session
或TempData
(与.Peek
结合使用,以免丢失)如果用户点击刷新按钮)。我不确定
Verify
GET方法到底在渲染什么,但是如果它不包含所有属性的控件,则Verify
提交按钮将需要回发一些ID值,该值允许您再次从中检索模型数据库或会话,最后将其保存到数据库。关于javascript - MVC jQuery/ Controller 后重定向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26740814/