jquery ajax发布数据在控制器端始终为空

时间:2015-05-07 14:03:07

标签: jquery ajax model-view-controller

我一直试图发布Ajax帖子,但数据总是在Controller端获得Null。请帮助: -

**Model:-**
public class UpdateProxyTracker
    {    
        public string Test_Reference_Id { get; set; }
        public string Owner { get; set; }
        public string Remarks { get; set; }        
        public string Status { get; set; }        
    }

**View:** 
@using (Html.BeginForm("UpdateTracker", "Home", FormMethod.Post, new { id = "optionForm" }))
{ 
<div>
        <fieldset style="background-color: #FFFFFF">
            <legend>Update Details</legend>
            <table>
                <tr>
                    <td>Test Ref Id</td>
                    <td>
                        <input id="testrefId" readonly="readonly" type="text" value=@Model.Test_Reference_Id>
                    </td>
                </tr>
......
...
}

**JQuery:**
$(document).ready(function () {
    $("#SaveT").click(function () {

        var status = $("#statusddl").val();
        var owner = $("#owner").val();
        var remark = $("#remark").val();
        var test_Reference_Id = $("#testrefId").val();

        var data =
        {
            'Test_Reference_Id': test_Reference_Id,
            'Owner': owner,
            'Remarks': remark,
            'Status': status
        };

        $.ajax({
            url: '@Url.Action("UpdateTracker", "Home")',            
            type: "POST",
            contentType: 'application/json',
            dataType: 'json',
            data: data,            
            success: function (msg) {                           
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(errorThrown);                
            }
        });

    });
});


**Controller:**
public ActionResult UpdateTracker(UpdateProxyTracker data)
        {
                SepHomeService svc = new SepHomeService();
                bool isValid = svc.UpdateData(data);
                var result = svc.GetData();
                return View("Dataview", result);
        }

击溃:      routes.MapRoute(                 名称:“默认”,                 url:“{controller} / {action} / {id}”,                 默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional}             );

问题 这里的数据总是空的。 我尝试将数据传递为JSON.stringify(数据),但没有帮助 我们是否需要添加@ Html.begin表单标记来进行ajax调用 此处的数据在ajax调用之前填充,但未传递给控制器 我们需要更新Route以进行正确的Ajax调用吗? 请建议

3 个答案:

答案 0 :(得分:3)

你需要&#34;劫持&#34;表单并使用jQ AJAX发送数据。下一个示例展示了如何制作这个:

// jQ
$(function() {
   $("form").submit(function(e) {
      e.preventDefault();
      e.returnValue = false;

      var status = $("#statusddl").val();
      var owner = $("#owner").val();
      var remark = $("#remark").val();
      var test_Reference_Id = $("#testrefId").val();
      // ...
   });
});

$('form').submit是快捷方式,用于处理网页中任何表单的提交事件。

来电e.preventDefault()e.returnValue = false有助于防止提交该表单。只有你需要把AJAX。

我希望此代码可以帮助您

<强>更新 加上之前的解决方案,您需要将数据变量修改为下一个代码:

var data = {
   "data": {
      "Test_Reference_Id": test_Reference_Id,
      "Owner": owner,
      "Remarks": remark,
      "Status": status
    }
};

这是必要的,因为您希望控制器中有一个名为data的参数。此外,JSON中的属性必须使用双引号(")而不是单引号,就像您使用的那样。

答案 1 :(得分:1)

试试这个,对我有用

不使用

contentType: 'application/json',
dataType: 'json',

如果方法不是JsonResult,则这些东西仅适用于JsonResult而不是ActionResult

使用下面的方法。

$.ajax({
            type: "POST",
            data: {data:data},
            url: '../{ControllerName}/{MethodName}',                                                        
            success: function (response) {                           
            },
            error: function (response) {
                alert(errorThrown);                
            }
      });

答案 2 :(得分:0)

$.ajax({
            url: '@Url.Action("UpdateTracker", "Home")',            
            type: "POST",
            contentType: 'application/json',
            dataType: 'json',
            data: {data:data},/**important*/            
            success: function (msg) {                           
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(errorThrown);                
            }
      });

可能需要参数名称;