1

我无法使用控制器方法。我认为它可能是 url,但我尝试了它的不同变体。我一直试图弄清楚这一点太久了。

$.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("");
            }
    }
}

知道有什么问题吗?

4

5 回答 5

2

我看到您提供的示例存在 2 个问题。

  1. URL.Action 方法只会'/ContactForm/ajaxCall'在您需要的是完全限定的 URL ( )时返回'http://servername.com/ContactForm/ajaxCall'

  2. 客户端 javascript 期望服务器发送回 JSON,并且您的控制器操作返回 HTML。更改控制器操作以返回“JsonResult”,它应该可以正常工作,我测试过。

于 2013-07-11T01:22:00.393 回答
0

你有没有尝试过:

url: '@Url.Action("ajaxCall", "ContactForm")

您不应该指定控制器类的全名。您也可以尝试路线名称。

于 2013-07-10T20:43:43.913 回答
0

不要在调用中指定单词“Controller” @Url.Action()

@Url.Action("ajaxCall", "ContactForm")

它不是在寻找类名,而是在寻找控制器名,并且在 ASP.NET MVC 约定中,“Controller”一词是类名的一部分,表示它是一个控制器,在这种情况下,它被称为“ContactForm”。

于 2013-07-10T20:39:12.937 回答
0

如果 David 的回答没有让您一路走好(一定要查看呈现的页面以确定它输出的内容),请尝试将 Razor 代码包装在大括号中:

@{Url.Action("ajaxCall", "ContactForm")}
于 2013-07-10T20:41:24.570 回答
0

尝试发布这样的 javascript 对象:

var value = { s : 'Test string' }

在 ajax 调用中:

data: JSON.stringify(value)

所以模型绑定器会找到一个 's' 属性来映射到 's' 参数。

根据 dataType ajax 选项,您应该从操作返回 JsonResult:此选项是从服务器接收到的预期响应类型。

于 2013-07-11T00:21:44.403 回答