Usando $ .ajax ou $ .post para chamar o método MVC 5 Controller

Estou tentando configurar o que deve ser uma chamada muito simples de uma página MVC para um controlador usando JavaScript. Este é o meu controlador:

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

esta é a minha visualização (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

e este é o meu JavaScript (incluído no arquivo _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");
}

Tudo se conecta perfeitamente durante a depuração, mas opayload variável chega comoNothing noSaveData função. Eu tentei usar$.post mas com problemas semelhantes e todas as referências que encontrei para usar qualquer um dos métodos, basta presumir que funcionará pela primeira vez sem erros e sem dicas de solução de problemas.

Como você configura o$.ajax ou$.post funções para chamar corretamente um controlador e passar uma string simples?

questionAnswers(2)

yourAnswerToTheQuestion