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

时间:2017-03-09 06:26:10

标签: ajax asp.net-mvc-4 partial-views

我创建了一个局部视图,它在表单"电子邮件地址"上采用了一个参数,我希望该字符串传递给我的控制器,名为" 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>

这是我的控制器代码:我的输入字符串是&#34;电子邮件&#34;为空

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

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

1 个答案:

答案 0 :(得分:1)

更改名称=&#34; teamEmailAddress&#34; to name =&#34; email&#34;请尝试以下方法:

 <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/"

但是如果你必须对你的电子邮件地址做一些逻辑,那么点击那个控制器动作并返回JSON,因为RedirectToAction在AjaxCall中不起作用,如:

 return Json("true");

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

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