为什么在jQuery加载时触发Post代码?

时间:2010-01-13 16:45:00

标签: jquery asp.net-mvc vb.net post get

我在ProceduresControlller中有以下功能:

Function Add(ByVal bpid As Integer) As ActionResult
    Return View(GetAvailableProcedures(bpid))
End Function

<AcceptVerbs(HttpVerbs.Post)> _
Function Add(ByVal bpid As Integer, ByVal code As String, ByVal covered As Boolean) As ActionResult
    AddProcedure(bpid, codes, covered)
    Return View("Close")
End Function

我正在通过jQuery加载Add对话框,如下所示:

$("#dialog").load(
    "/Procedures/Add",
    { bpid: 123 },
    function(data) {
        alert(data);
    });

这是失败的,因为它调用Post方法(其中“cover”不能为空)而不是Get。我尝试用<AcceptVerbs(HttpVerbs.Get)>来装饰Get,但它并没有改变结果。

为什么这会触发Post,如何让它使用Get?我意识到我可以将名称更改为不明确,但我想知道为什么如果我只传递“bpid”,它将不会选择Get。

1 个答案:

答案 0 :(得分:3)

来自jQuery API reference for Ajax.load

  

默认情况下会执行GET请求 - 但如果以Object / Map(键/值对)的形式传入任何额外参数,则会发生POST。作为字符串传递的额外参数仍将使用GET请求。

所以我猜你可以改成它:

$("#dialog").load(
    "/Procedures/Add",
    { "bpid" : "123" },
    function(data) {
        alert(data);
    }
);

HTHS,
查尔斯