我正在努力实现以下目标,我有一个页面,其中有一个用户记录呼叫,该用户需要输入各种字段并从多个下拉列表中进行选择,然后我需要将该数据(通过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方法中对其进行检索。我的建议是保留到数据库(一个单独的表或一个包含指示未决状态的字段的现有表),但是您可以使用SessionTempData(与.Peek结合使用,以免丢失)如果用户点击刷新按钮)。

我不确定Verify GET方法到底在渲染什么,但是如果它不包含所有属性的控件,则Verify提交按钮将需要回发一些ID值,该值允许您再次从中检索模型数据库或会话,最后将其保存到数据库。

关于javascript - MVC jQuery/ Controller 后重定向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26740814/

10-12 18:15