我正在使用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; }
答案 0 :(得分:2)
除了$.post()
之外你还有一些问题,我可以在你的代码中指出几个基本问题:
"~/Home/LoadCityViewModel"
不是有效网址,ASP.NET服务器端只识别~/
符号,指向网络应用程序根路径(无论是虚拟目录还是网络)网站根目录)。请改用Url.Action
或Url.Content
来解析网址。如果指定的代码是在单独的javascript文件中声明的,请考虑将url作为设置参数传递(在Razor视图中初始化),或者只指定"/Home/LoadCityViewModel"
(如果您确定将Web应用程序部署到网站根目录而不是虚拟目录)。请注意,"Home/LoadCityViewModel"
(不带前导"/"
)表示“从当前位置”或“从当前页面路径”,它将无法工作,例如,如果您从另一个控制器的视图中调用。 / p>
jQuery UI Dialog Widget
:查看API sample上的http://jqueryui.com/dialog/或源代码
return false
,当函数始终返回false
时,它真的有意义吗?
您的Controller的操作方法应该是公开的。
请注意,Action方法应该返回ActionResult
,而不是ViewModel
。
如果您需要将操作限制为仅处理POST http方法(这就是您选择jQuery.post()而不是jQuery.get()的原因,我猜),请使用{标记您的方法{3}}
所以,我想这是你基本需要的(如果它是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
基本上你想指定你想要调用的控制器和方法。验证是这种情况下的方法。