为什么我的对话框表单数据没有传递到我的 Ajax Post 中的控制器?

Why is my dialog form data not being passed to my controller in my Ajax Post?

我创建了一个部分视图,它在表单 "email address" 上接受一个参数,我希望将该字符串传递到我的名为 "InviteTeam" 的控制器,它被装饰为 "HttpPost" .

这里是部分视图和 ajax 命令

 <form id="inviteTeam">
<label class="sr-only" for="communityCity">Team Email Address</label>
<input class="form-control" type="text" name="teamEmailAddress" id="teamEmailAddress" placeholder="Team Email">

    <a href="#" id="btnSubmit" class="btn btn-sucess">Invite</a>
</form>


<script>
    $(document).ready(function () {

        $("#btnSubmit").click(function () {

            var formdata = $("#inviteTeam").serialize();
            alert(formdata);
            $.ajax({

                type: "POST",
                url: "/habitats/InviteTeam",

                data: formdata,
                success: function () {
                    $("#inviteModal").modal("hide");
                    window.location.href = "/Habitats/EditCommunity/"
                },
                error: function (errorData) { alert(errorData); }



            })
        });

    });
</script>

这是我的控制器代码:我的输入字符串是 "email" 是 null

 public ActionResult InviteTeam()
        {
            return PartialView();
        } 

        [HttpPost]
        public ActionResult InviteTeam(string email)
        {
            return RedirectToAction("EditCommunity", "Habitats");
        }

将 name="teamEmailAddress" 更改为 name="email" 尝试以下操作:

 <form id="inviteTeam">
    <label class="sr-only" for="communityCity">Team Email Address</label>
    <input class="form-control" type="text" name="email" id="teamEmailAddress" placeholder="Team Email">    
    <a href="#" id="btnSubmit" class="btn btn-sucess">Invite</a>
</form>


<script>
    $(document).ready(function () {

        $("#btnSubmit").click(function () {

            var formdata = $("#inviteTeam").serialize();
            alert(formdata);
            $.ajax({

                type: "POST",
                url: "/habitats/InviteTeam",

                data: formdata,
                success: function () {
                    $("#inviteModal").modal("hide");
                    window.location.href = "/Habitats/EditCommunity/"
                },
                error: function (errorData) { alert(errorData); }

            })
        });

    });
</script>

另一种解决方案是更改操作方法中的参数名称,例如:

    [HttpPost]
    public ActionResult InviteTeam(string teamEmailAddress)
    {
        return RedirectToAction("EditCommunity", "Habitats");
    }

此外,如果您只想重定向,则不需要任何 ajax 调用。您可以简单地在 javascript 中重定向为:

 window.location.href = "/Habitats/EditCommunity/"

但是如果你必须对你的电子邮件地址做一些逻辑,然后点击控制器操作和 return JSON 因为 RedirectToAction 在 Ajax 调用中不起作用:

 return Json("true");

在你Ajax的成功方法中,你可以检查:

 success: function (data) {
              if (data == true){
                  $("#inviteModal").modal("hide");
                  window.location.href = "/Habitats/EditCommunity/";
               }
          }