jquery - 从 ASP.NET MVC2 应用程序执行 Ajax 调用时出现问题

标签 jquery ajax asp.net-mvc-2

我正在将现有的 ASP.NET 应用程序转换为 MVC2,并且我有一个使用 Ajax 通过 jQuery 调用的现有方法,该方法以前可以工作,但现在不起作用。因此,由于使用 MVC2,我似乎需要做一些我无法弄清楚的更改。

我降低了代码的复杂度,但还是不行。这是我当前的代码:

点击按钮时触发的 jQuery 脚本

function leaveComment() {
if (validate()) {
    $.ajax({
        type: "POST",
        url: "/Pages/PostBlogComment",
        data: "{'name':'Test','url':'Test','email':'Test','body':'Test','postid':'Test'}",
        dataType: "json",
        success: function (msg) {
            //success code goes here
        },
        error: function (msg) {
           //error code goes here
        }
    });
}

};

在名为 Pages 的 Controller 中,我创建了以下方法:

public string PostBlogComment( string name, string url, string email, string body, string postid)
{
  return "This is a test";
}

调试时,我可以看到 PostBlogComment 方法被调用,但我在这里面临两个主要问题:

  1. 该方法的所有参数都以 null 形式接收,因此我没有可用的数据。现在为了进行测试,所有参数都以 Test 形式发送,正如您从代码中看到的那样。
  2. 当将结果返回给 Ajax 方法时,将调用错误路径,而不是成功路径,即使该方法确实正常返回字符串(即使发送的参数为空)

对于那些经常使用这些东西的人来说,这个错误可能很容易发现(或者至少我希望如此:))

最佳答案

以下是您需要进行的更改:

$.ajax({
    type: 'POST',
    url: '/Pages/PostBlogComment',
    data: { 
        name: 'Test', 
        url: 'Test', 
        email: 'Test', 
        body: 'Test', 
        postid: 'Test'
    },
    success: function (result) {
        alert(result.Value);
    },
    error: function (msg) {
       //error code goes here
    }
});

和你的 Controller 操作

public ActionResult PostBlogComment( 
    string name, 
    string url, 
    string email, 
    string body, 
    string postid
)
{
    return Json(new { Value = "This is a test" });
}

可以通过引入 View 模型来改进:

public class PostViewModel
{
    public string Name { get; set; }
    public string Url { get; set; }
    public string Email { get; set; }
    public string Body { get; set; }
    public string Postid { get; set; }
}

然后:

public ActionResult PostBlogComment(PostViewModel model)
{
    return Json(new { Value = "This is a test" });
}

注意事项:

  1. jquery AJAX 调用的 data 哈希属性需要像我的示例一样,否则您将发送 JSON 编码的字符串,而 ASP.NET MVC 的默认模型绑定(bind)器不会发送知道如何解析回 Action 参数。在 ASP.NET MVC 3 中,这种情况发生了变化,因为有 JsonValueProviderFactory允许您发送 JSON 请求。因此,如果您使用 ASP.NET MVC 3,您可以像这样发送 AJAX 请求,并且操作参数将被正确绑定(bind):

    $.ajax({
        type: 'POST',
        url: '/Pages/PostBlogComment',
        data: JSON.stringify({ 
            name: 'Test', 
            url: 'Test', 
            email: 'Test', 
            body: 'Test', 
            postid: 'Test'
        }),
        contentType: 'application/json',
        success: function (result) {
            alert(result.Value);
        },
        error: function (msg) {
           //error code goes here
        }
    });
    
  2. ASP.NET MVC 中的所有 Controller 操作都必须返回 ActionResults。所以如果你想要 Json 那么返回 JsonResult .

  3. 该操作将匿名类型传递给 Json包含 Value 属性的方法,该属性在 success 回调中使用,来自服务器的响应如下所示:

    { 'Value': 'This is a test' }
    
  4. 切勿在 JavaScript 文件中硬编码这样的 URL,否则应用程序在部署时可能会崩溃。处理 url 时始终使用 Url 助手:

    ...
    url: '<%= Url.Action("PostBlogComment", "Pages") %>',
    ...
    

    或者,如果这是一个外部 javascript 文件,您可以使用在您的 View 中初始化的一些全局 js 变量,指向正确的 url,或者将此 url 作为 DOM 的一部分(例如作为 anchor href 属性或 HTML5 data-* 属性),然后使用 jQuery 获取值。

关于jquery - 从 ASP.NET MVC2 应用程序执行 Ajax 调用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371658/

相关文章:

asp.net-mvc - Asp.Net MVC 2 - 更改 PropertyValueRequired 字符串

c# - 使用 MVC2 的 EditorFor helper 时如何控制 html 元素的 id 和名称

asp.net-mvc-2 - 如何在 ASP.NET MVC2 中枚举表单集合

javascript - ContentEditable - 按 Enter 键生成 P 标签

javascript - 如何使用 jQuery animate() 函数在 div 中滚动?

java - 如何在Java/JSP中使用jQuery网格插件?

php - 使用 Jquery/ajax 将数据发送到数据库

javascript - 如何在任意位置显示 Nirvana Tikku,径向菜单

php - 使用 AJAX 和 SQL 实时监控数据库更新

javascript - 根据 ajax 的值终止或停止