MVC4中的jQuery $ .post()方法

时间:2013-03-25 20:41:39

标签: asp.net jquery-ui jquery asp.net-mvc-4

我正在使用jQuery $ .post()方法来调用控制器中的方法,但是在调用此函数时它不会触及该方法。任何人都知道如何使用jQuery $ .post()方法?

function OpenDialog(StateCode) { 
    $.post("~/Home/LoadCityViewModel", { 
        stateCode: StateCode }, 
        function () { 
            $("#dialog-modal").dialog("open"); 
        }); 
        return false; 
}

private ListingsViewModel LoadCityViewModel(string stateCode) { return null; }

3 个答案:

答案 0 :(得分:2)

除了$.post()之外你还有一些问题,我可以在你的代码中指出几个基本问​​题:

  1. "~/Home/LoadCityViewModel"不是有效网址,ASP.NET服务器端只识别~/符号,指向网络应用程序根路径(无论是虚拟目录还是网络)网站根目录)。请改用Url.ActionUrl.Content来解析网址。如果指定的代码是在单独的javascript文件中声明的,请考虑将url作为设置参数传递(在Razor视图中初始化),或者只指定"/Home/LoadCityViewModel"(如果您确定将Web应用程序部署到网站根目录而不是虚拟目录)。请注意,"Home/LoadCityViewModel"(不带前导"/")表示“从当前位置”或“从当前页面路径”,它将无法工作,例如,如果您从另一个控制器的视图中调用。 / p>

  2. jQuery UI Dialog Widget:查看API sample上的http://jqueryui.com/dialog/或源代码

  3. return false,当函数始终返回false时,它真的有意义吗?

  4. 您的Controller的操作方法应该是公开的。

  5. 请注意,Action方法应该返回ActionResult,而不是ViewModel

  6. 如果您需要将操作限制为仅处理POST http方法(这就是您选择jQuery.post()而不是jQuery.get()的原因,我猜),请使用{标记您的方法{3}}

  7. 所以,我想这是你基本需要的(如果它是Razor View中的内联脚本):

    function OpenDialog(StateCode) { 
        $.post("@Url.Action("LoadCityViewModel", "Home")",
            // it will actually output "/Home/LoadCityViewModel"
            { stateCode: StateCode }, 
            function () { 
                $("#dialog-modal").dialog(); 
            });
    }
    

    服务器代码:

    [HttpPost]
    public ActionResult LoadCityViewModel(string stateCode) 
    { 
        return Json(null); //Pass your model as a parameter here.
    }
    

    如果我写了太多多余的东西,那我很抱歉;)

答案 1 :(得分:1)

最后,这是使每次调用都能最有效的方法。

function OpenDialog(StateCode) {
    $.ajax({
        type: 'POST',
        url: 'Home/LoadCityViewModel',
        data: JSON.stringify({ stateCode: StateCode }),
        contentType: 'application/json; charset=utf-8',
        cash: false,
        success: function () {
            $("#dialog-modal").dialog("open");
        }
    });
    return false;
}

答案 2 :(得分:0)

            $.Ajax({
                url: path to script,
                success: onSuccess,
                error: onError,
                type: 'POST',
                dataType: "json",
                contentType: "application/json",
                data: JSON.stringify(query)
            });

有一个ajax请求的例子,因为我喜欢格式化它。但这不一定是你的问题。我相信问题是你的方法的路径。比方说,我有一个名为UserLoginController的控制器。从用户登录视图页面,(javascript所在的位置)我使用url调用控制器 - UserLogin / Validate
基本上你想指定你想要调用的控制器和方法。验证是这种情况下的方法。