Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用一个按钮发送两个表单,然后重定向到第三个操作_Javascript_C#_Asp.net Mvc - Fatal编程技术网

Javascript 用一个按钮发送两个表单,然后重定向到第三个操作

Javascript 用一个按钮发送两个表单,然后重定向到第三个操作,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,是否可以同时向不同的行动提交两份表格?在操作中,我要设置TempData,然后重定向到第三个操作 我尝试了这里描述的方法,我们建议每个表单都有一个输入字段。第一个表单输入“name”,第二个表单输入“lastname” 我的行为看起来像 [HttpPost] public void FirstAction(string name) { TempData["name"] = name; } [HttpPost] public

是否可以同时向不同的行动提交两份表格?在操作中,我要设置TempData,然后重定向到第三个操作

我尝试了这里描述的方法,我们建议每个表单都有一个输入字段。第一个表单输入“name”,第二个表单输入“lastname”

我的行为看起来像

    [HttpPost]        
    public void FirstAction(string name) {
        TempData["name"] = name;
    }
    [HttpPost]
    public void SecondAction(string lastname) {
        TempData["lastname"]=lastname;
    }
    public ActionResult ThirdAction () {
        string fullname;
        fullname = string.Format((string)TempData["name"] + 
        (string)TempData["lastname"]);
        return View(fullname);
     }

但它不起作用。在大多数情况下,我只得到全名字符串中的姓名或姓氏。看起来它是异步的或者其他我现在不太了解的东西。您能帮助我吗?

只有在下一个即时请求时才能使用TempData。这就是为什么您只能从临时数据字典中获取一个项(这两个操作方法中的最后一个)。您应该考虑使用另一种持久机制,如会话/数据库< /P>

此外,您不应提交表单,而应考虑Ajax < /P>

submitForms = function(){
   $.post("@Url.Action("FirstAction")",$("#formForFirstAction").serialize());
   $.post("@Url.Action("SecondAction")",$("#formForSecondAction").serialize());
   window.location("/Home/ThirdAction")
}
下面是一个使用会话持久化数据的示例

[HttpPost]
public void SecondAction(string lastname) {
    Session["lastname"]=lastname;
}
public ActionResult ThirdAction () {
    string fullname;
    fullname = string.Format((string)Session["name"] + 
    (string)Session["lastname"]);
    return View(fullname);
}

您还可以考虑使用或<代码> Q.ALL < /COD>以确保在AJAX调用完成之后才进行重定向(以避免回叫地狱)

TimDATA只可用于下一个立即请求。这就是为什么您只能从临时数据字典中获取一个项(这两个操作方法中的最后一个)。您应该考虑使用另一种持久机制,如会话/数据库< /P>

此外,您不应提交表单,而应考虑Ajax < /P>

submitForms = function(){
   $.post("@Url.Action("FirstAction")",$("#formForFirstAction").serialize());
   $.post("@Url.Action("SecondAction")",$("#formForSecondAction").serialize());
   window.location("/Home/ThirdAction")
}
下面是一个使用会话持久化数据的示例

[HttpPost]
public void SecondAction(string lastname) {
    Session["lastname"]=lastname;
}
public ActionResult ThirdAction () {
    string fullname;
    fullname = string.Format((string)Session["name"] + 
    (string)Session["lastname"]);
    return View(fullname);
}

您还可以考虑使用或<代码> Q.ALL < /COD>以确保在AJAX调用完成之后才重新定向(以避免回叫地狱)

解决方案1:使用Ajax表单提交。

解决方案2:在hidden and submit中创建一个表单中的所有内容。您可以实现此静态设置。在每个提交按钮中,单击必须从中读取的数据 表格1和表格2,并将其更新为隐藏表格并提交

解决方案3:动态隐藏表单创建和提交。将所有内容集成到动态创建的表单中,并动态提交

动态创建示例

JQuery方法

$(文档).ready(函数(){
$(“”).appendTo('body').submit();
});

解决方案1:使用AJAX表单提交

解决方案2:在hidden and submit中创建一个表单中的所有内容。您可以实现此静态设置。在每个提交按钮中,单击必须从中读取的数据 表格1和表格2,并将其更新为隐藏表格并提交

解决方案3:动态隐藏表单创建和提交。将所有内容集成到动态创建的表单中,并动态提交

动态创建示例

JQuery方法

$(文档).ready(函数(){
$(“”).appendTo('body').submit();
});

您无法发送多个表单,因为在第一个表单提交后,您将失去控制。不过,你可以写一篇AJAX文章。你不能发送多个表单,因为在第一个表单提交后,你会失去控制。不过你可以写一篇AJAX文章。谢谢回复。但我有一个问题。如果SecondAction或FirstAction有复杂的逻辑,CPU需要时间来计算和分配会话,该怎么办?js脚本会等到它完成,还是会激活重定向?编辑:谢谢你编辑的答案。我明白了,没有。您应该在执行此操作时使用jQuery
。或者在post方法的回调中执行重定向(这不是一个好方法,因为您有两个ajax调用!回调地狱问题)。请参阅更新的答案谢谢您的回复。但我有一个问题。如果SecondAction或FirstAction有复杂的逻辑,CPU需要时间来计算和分配会话,该怎么办?js脚本会等到它完成,还是会激活重定向?编辑:谢谢你编辑的答案。我明白了,没有。您应该在执行此操作时使用jQuery
。或者在post方法的回调中执行重定向(这不是一个好方法,因为您有两个ajax调用!回调地狱问题)。请参阅更新的答案
$(document).ready(function(){
    $('<form action="form2.html"></form>').appendTo('body').submit();
});