如何使用AJAX将字符串传递给Controller

时间:2018-01-02 13:43:00

标签: jquery asp.net ajax asp.net-mvc razor

当按下按钮时,我似乎无法执行将字符串传递给控制器​​的这个非常简单的任务。收到的数据始终为空。有人能告诉我我做错了吗?

形式:

<form>
    <div class="form-group">
        <label for="ProcessName" class="control-control">Process Name</label>
        <input id="ProcessName" class="form-control" placeholder="Choose process name">
        <small id="subtitle" class="form-text text-muted">Text under input field.</small>
    </div>
    <button type="submit" class="btn btn-primary" id="addElement">Submit</button>
</form>

使用Javascript:

$(function () {
    $("#addElement").click(function () {
        var processName = $("#ProcessName").val();

        // I've tried this method
        $.post('@Url.Action("AddProcessName")', processName, function (data, status) {
                    alert(data)
        });

       // And also this one, but both of them don't work.
       // I did not try them at the same time, of course
        $.ajax({
            type: "POST",
            url: '@Url.Action("AddProcessName")',
            data: processName,
            dataType: 'text',
            success: function (response) {
                alert(response)
                };
        });
    });
});

服务器端:

[HttpPost]
public IActionResult AddProcessName(string data)
{
    pm.ID = 1;
    pm.Name = data; // I put a breakpoint here to check the value of 'data'
    return Content(pm.Name);
}

1 个答案:

答案 0 :(得分:2)

您告诉您的行动期望名为data的变量,但您并未发送该变量。您需要将jQuery AJAX请求的data属性更改为:

data: { data: processName },

我还建议您从Action返回JSON,因为纯空文本可能是片状的,因为空格可能会或可能不会被解释。试试这个:

$("#addElement").click(function () {
  $.ajax({
    type: "POST",
    url: '@Url.Action("AddProcessName")',
    data: { 
      data: $("#ProcessName").val() 
    },
    dataType: 'json',
    success: function(response) {
      // use console.log for debugging, and access the property of the deserialised object
      console.log(response.Name); 
    };
  });
});
[HttpPost]
public IActionResult AddProcessName(string data)
{
    pm.ID = 1;
    pm.Name = data;
    return Json(new { Name = pm.Name });
    // or just:
    // return Json(pm);
}