在MVC.NET中调用ActionResult时,Ajax调用显示错误

时间:2015-10-11 18:30:51

标签: asp.net ajax angularjs asp.net-mvc

我在asp.net MVC中使用Angularjs。我想使用ajax命令保存数据,但它显示错误消息并且在浏览器中显示“无法加载资源:服务器响应状态为500(内部服务器错误)”。我想打电话 一次用于静态id测试的动作结果,但它不起作用。我的查看页面是:

@{
    ViewBag.Title = "SaveOwn";
}
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script>
    (function (angular) {
        'use strict';
        angular.module('SaveOwnData', [])
          .controller('SaveOwnDataController', [
        '$scope', function ($scope) {
            $scope.saveData = {
                id: '',
                name: '',
                designation: '',
                mobile: ''
            }
            $scope.save = function () {
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    data: { "id": "1" },
                    url: "/Home/SaveData",
                    success: function () {
                        alert("Success");
                    },
                    error: function () {
                        alert("error");
                    }
                });
            };
        }]);
    })(window.angular);

</script>

<div ng-app="SaveOwnData" ng-controller="SaveOwnDataController as saveData" ng-init="id=0; name=0;designation=0; mobile=0 ">
    <input type="text" ng-model="saveData.id" />
    <input type="text" ng-model="saveData.name" />
    <input type="text" ng-model="saveData.designation" />
    <input type="text" ng-model="saveData.mobile" />
    <input type="button" data-ng-click="save()" value="Save" />
    {{saveData.total()}}
    {{saveData.mobile}}
</div>

ActionResult代码是:

public ActionResult SaveData(string id)
        {
            return View();
        }

我想用ajax作为demo演示一次SaveData方法,然后我将使用所有参数。请帮忙。

提前致谢。

3 个答案:

答案 0 :(得分:1)

在这种情况下你需要返回一个Json ActionResult,我假设没有名为&#34; SavedData&#34; (例如Savedata.cshtml)。您应该检查chrome网络选项卡并查看错误,但这很可能就是原因。它会在那里归还。

尝试如下:

[HttpPost]
public ActionResult SaveData(string id)
{
    return Json(new{status: "success"}); //return json status...
}

可以读取结果如下:

  $scope.save = function () {
                $.ajax({
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    data: { "id": "1" },
                    url: "/Home/SaveData",
                    success: function (data) {
                        alert(data.status);
                    },
                    error: function () {
                        alert("error");
                    }
                });
            };
        }]);

答案 1 :(得分:1)

感谢所有人的帮助,但还有另一个问题。  在我的代码中使用JSON.stringify后,我已成功调用操作,解决了该问题:

def mysplit(html):
    in_tag = False
    in_word = False
    for i, ch in enumerate(html):
        if ch == '<':
            in_tag = True
        elif ch == '>':
            in_tag = False
        space = ch.isspace() and not in_tag
        if not in_word and not space:
            in_word = True
            begin = i
        elif in_word and space:
            in_word = False
            yield html[begin:i]
    if in_word:
        yield html[begin:]

testhtml = 'I like <a class="thing1 thing2">this thing</a>'
print(list(mysplit(testhtml)))
# prints: ['I', 'like', '<a class="thing1 thing2">this', 'thing</a>']

答案 2 :(得分:0)

修改AJAX调用参数以使用以~开头的网址,如下所示:~/Home/SaveData

另外,请确认您已将[HttpPost]属性设置如下:

[HttpPost]
public ActionResult SaveData(string id)
{
    return View();
}