Usando $ .ajax o $ .post para llamar al método MVC 5 Controller

Estoy tratando de configurar lo que debería ser una llamada muy simple desde una página MVC a un controlador usando JavaScript. Este es mi 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 es mi vista (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

y este es mi JavaScript (incluido a través del archivo _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");
}

Todo se conecta muy bien al depurar, pero elpayload la variable llega comoNothing en elSaveData función. He intentado usar$.post pero con problemas similares y todas las referencias que he encontrado al usar cualquiera de los métodos, simplemente asuma que funcionará la primera vez sin errores y no tiene ningún consejo para la solución de problemas.

¿Cómo se configura el$.ajax o$.post funciones para llamar correctamente a un controlador y pasar una cadena simple?

Respuestas a la pregunta(2)

Su respuesta a la pregunta