我无法使用控制器方法。我认为它可能是网址,但我尝试了不同的变体。我一直试图解决这个问题太久了。
$.ajax({
url: '@Url.Action("ajaxCall", "ContactForm")',
type: "POST",
cache: false,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify("test"),
success: function () {
alert("success");
},
error: function () {
alert("fail");
}
})
这是我的控制器。
namespace form.Controllers
{
public class ContactFormController : Controller
{
[HttpPost]
public ActionResult ajaxCall(string s)
{
return Content("");
}
}
}
知道出了什么问题吗?
答案 0 :(得分:2)
我看到您提供的示例有两个问题。
当您需要的是完全限定的网址('/ContactForm/ajaxCall'
)
'http://servername.com/ContactForm/ajaxCall'
客户端javascript期望服务器发送回JSON,并且您的控制器操作正在返回HTML。更改控制器操作以返回'JsonResult',它应该可以正常工作,我测试过。
答案 1 :(得分:0)
请勿在{{1}}的调用中指定“控制器”一词:
@Url.Action()
它不是在寻找类名,它正在寻找 controller 名称,而在ASP.NET MVC约定中,“Controller”这个词是类名的一部分,表示它是一个控制器,否则在这种情况下命名为“ContactForm”。
答案 2 :(得分:0)
如果大卫的回答没有让你一直到那里(一定要查看渲染的页面,看看它输出的确定),尝试将Razor代码包装在大括号中:
@{Url.Action("ajaxCall", "ContactForm")}
答案 3 :(得分:0)
你试过了吗?
url: '@Url.Action("ajaxCall", "ContactForm")
您不应该指定控制器类的全名。您也可以尝试路线名称。
答案 4 :(得分:0)
尝试发布像这样的javascript对象:
var value = { s : 'Test string' }
在ajax电话上:
data: JSON.stringify(value)
因此模型绑定器会找到一个's'属性来映射到's'参数。
根据dataType ajax选项,您应该从操作中返回JsonResult:此选项是从服务器收到的预期响应类型。