2

我正在使用 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; }
4

3 回答 3

2

由于您还有一些问题$.post(),我可以在您的代码中指定几个基本问​​题:

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

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

  3. return false,当函数总是返回时真的有意义false吗?

  4. 控制器的操作方法应该是公开的。

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

  6. 如果您需要限制您的操作仅处理POST http 方法(这就是您选择jQuery.post()而不是jQuery.get()的原因,我猜),用HttpPostAttribute

所以,我想这就是你基本上需要的(如果它是 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.
}

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

于 2013-03-25T20:48:02.283 回答
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;
}

于 2013-03-26T17:53:31.870 回答
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
基本上你想指定你想要调用的控制器和方法。验证是这种情况下的方法。

于 2013-03-25T20:48:44.287 回答