使用 $.ajax 或 $.post 调用 MVC 5 控制器方法

2024-04-22

我正在尝试使用 JavaScript 设置从 MVC 页面到控制器的非常简单的调用。这是我的控制器:

Imports System.Web.Mvc

Namespace Controllers
    Public Class DataController
        Inherits Controller

        Function Index() As ActionResult
            Return View()
        End Function

        <HttpPost>
        Function SaveData(payload As String) As String
            If payload IsNot Nothing AndAlso payload.Length > 0 Then
                Return "Good"
            Else
                Return "Bad"
            End If
        End Function

    End Class
End Namespace

这是我的视图(Index.vbhtml):

@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2>

@Code
    Html.BeginForm()
    @:<a href="#" onclick="SaveData();">Save Data</a>
    Html.EndForm()
End Code

这是我的 JavaScript(通过 _layout.vbhtml 文件包含):

function SaveData() {

    var payload = "TEST_DATA_GOES_HERE";

    // Calls controller correctly but data is null
    $.ajax({
        url: "/Data/SaveData",
        type: "POST",
        processData: false,
        dataType: String,
        data: { payload: payload }
    })
    .done(function () { alert('Application saved.'); })
    .fail(function () { alert('Application failed to save.'); });

    // Returns a 500 error
    $.post("/Data/SaveData", { Payload: payload }, function (data) { alert('Application saved. ' + data); }, "String");

    // Calls controller correctly but data is null
    $.post("/Data/SaveData", payload, function () { alert('Application saved.' + data); }, "String");
}

调试时一切都连接得很好,但是payload变量到达时为Nothing in the SaveData功能。我尝试过使用$.post但对于类似的问题以及我发现的使用这两种方法的所有参考文献都只是假设它第一次就能正常工作而不会出现错误,并且没有任何故障排除提示。

您如何配置$.ajax or $.post正确调用控制器并传递简单字符串的函数?


你需要设置processData to true当您发送一个需要转换为查询字符串的对象时。

从API:

处理数据
默认情况下,作为对象(从技术上讲,字符串以外的任何内容)传递到数据选项的数据将被处理并转换为查询字符串,适合默认内容类型“application/x-www-form-urlencoded” 。如果要发送 DOMDocument 或其他未处理的数据,请将此选项设置为 false。

http://api.jquery.com/jQuery.ajax/ http://api.jquery.com/jQuery.ajax/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 $.ajax 或 $.post 调用 MVC 5 控制器方法 的相关文章