数据不从视图(ajax)发送到控制器(c#)

时间:2014-09-21 17:17:27

标签: c# jquery asp.net ajax asp.net-mvc

我是AJAX的新手,我不明白,为什么我的数据没有发送到控制器。 因此,在我的视图中,我有两个输入表单和一个按钮:

HTML:

<input type="text" name="AddName">
<input type="text" name="AddEmail"> 
<button class="btn btn-mini btn-primary" type="button" name="add_btn" onclick="DbAdd()">Add</button>

我需要在点击“add_btn”按钮后从这两个输入中获取数据并将它们发送到控制器。

的JavaScript:

<script type="text/javascript">
    function DbAdd()
    {
        // Get some values from elements on the page:
        var $form = $(this),
            addedName = $form.find("input[name='AddName']").val(),
            addedEmail = $form.find("input[name='AddEmail']").val();

        $("#UserTable").html("<div>Please Wait...</div>");
        $.ajax(
        {
            type: "POST",
            url: "Save",
            data:
                {
                    name: addedName, email: addedEmail,
                },
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: OnSuccess,
            error: OnError
        });
}

这是我的控制器方法“保存”(我需要保存从ajax到我的数据库的数据):

[HttpPost]
public ActionResult Save(User userinfo)
{
    string message = "";

    using (var uc = new UserContext())
    {
        uc.UserList.Add(userinfo);
        uc.SaveChanges();
        message = "Successfully Saved!";
    }

    if (Request.IsAjaxRequest())
    {
        return new JsonResult { Data = message };
    }
    else
    {
        ViewBag.Message = message;
        return View(userinfo);
    }
} 

问题在于,当我给控制器的方法设置一个断点时,我不会从ajax接收数据,只有null。所以我向DB添加一个空记录。 有什么建议吗?

2 个答案:

答案 0 :(得分:3)

看起来$form.find("input[name='AddName']").val()$form.find("input[name='AddEmail']").val()都返回null。您应该使用$("input[name='AddName']").val()$("input[name='AddEmail']").val()代替。将DbAdd()的定义更改为

以下
<script type="text/javascript">
    function DbAdd()
    {
        // Get some values from elements on the page:
        var addedName = $("input[name='AddName']").val(),
            addedEmail = $("input[name='AddEmail']").val();

        var user = { Name: addedName, Email: addedEmail };

        $("#UserTable").html("<div>Please Wait...</div>");
        $.ajax(
        {
            type: "POST",
            url: "Save",
            data: JSON.stringify({ userinfo: user }),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: OnSuccess,
            error: OnError
        });
    }
</script>

答案 1 :(得分:0)

有一个额外的逗号可能导致语法错误:

data:
{
  name: addedName, email: addedEmail, //<------------ here
}

并传递这样的数据:

var userinfo = { name: addedName, email: addedEmail };
data: JSON.stringify(userinfo) 

您还应该看到:Posting JavaScript objects with Ajax and ASP.NET MVC