Asp.net mvc 3 如何在asp.net MVC中使用ajax

Asp.net mvc 3 如何在asp.net MVC中使用ajax,asp.net-mvc-3,asp.net-ajax,json.net,Asp.net Mvc 3,Asp.net Ajax,Json.net,如何在asp.net MVC中从Ajax返回类对象 例如: 来自html的Ajax调用: $.ajax({ type: 'POST', url: '/Tutorial/Web/AlignmentRule/GetAlignmentDetails', data: { alignmentRuleId: alignmentRuleId }, success: functio

如何在asp.net MVC中从Ajax返回类对象

例如:

来自html的Ajax调用:

$.ajax({ 
            type: 'POST',
            url: '/Tutorial/Web/AlignmentRule/GetAlignmentDetails', 
            data: { alignmentRuleId: alignmentRuleId },
            success:
                function (data) {
                    alert(data.Id);
                        alert(data.alignmentData.Id);
                        $("#ruleName").val(data.alignmentData.Name);
                        $("#level").val(data.alignmentData.Id);
                },
            error:
                function () {
                    alert("Server Error!!!!");
                },
            dataType: 'JSON',
            async: false
        });
控制器中的动作方式为:

public virtual JsonResult GetAlignmentDetails(int alignmentRuleId)
    {
        var alignmentData = _allignmentRuleRepository.GetAlignmentById(alignmentRuleId);
        return Json( alignmentData );
    }

我还想返回一个alignmentRule类对象的列表……

您可以根据需要组合返回对象,例如,创建一个ViewModel作为装饰器来保存您想要传递的所有内容,如:

var json = new JsonViewModel() {
               alignmentData = alignmentData,
               rules = yourRules
           };

return Json(json);

引发此错误的原因是,由于安全原因,默认情况下MVC框架不允许您使用JSON响应HTTP GET请求。 为了使其工作,当您在操作中重新调用Json时,需要指定JsonRequestBehavior.AllowGet

编辑

使用[HttpPost]属性注释您的操作


有关此主题的进一步调查,请检查此

您有什么问题?如果要将alignmentData作为集合返回,可以使用$.eachdata、functionindex和item在success函数中迭代该集合{alert item.ID;。但它不会返回任何内容。.即使在这段代码中也会引发错误…请检查控制台是否有错误,但我怀疑应该是url:/AlignmentRule/GetAlignmentDetails,或者更好的url:'url.ActionGetAlignmentDetails,AlignmentRule';假设您的控制器是AlignmentRuleControllerI,我使用了调试程序,并且工作正常控制器的操作方法被正确调用,但返回数据时出现一些问题。尝试在AJAX方法中添加dataType:json。控制器中alignmentData的值有效吗?仍然相同。它显示服务器错误…如果您可以发送html页和控制器的一些代码片段…???您创建了JsonViewMo吗del对象?你传递的对象是否正确?如果是服务器错误,为什么不调试并在调用中添加一个断点,以便检查发生了什么?-你不能只是复制粘贴我编写的代码,而是让你知道如何将多个对象传递到回调中…但我使用type:post,这意味着数据将被传输仅通过post方法进行编辑。。。
[HttpPost]
public virtual JsonResult GetAlignmentDetails(int alignmentRuleId)
    {
        var alignmentData = _allignmentRuleRepository.GetAlignmentById(alignmentRuleId);
        return Json( alignmentData, JsonRequestBehavior.AllowGet);
    }