将.ajax请求发送到mvc控制器 - 但.done函数永远不会执行

时间:2014-05-21 13:10:24

标签: javascript asp.net-mvc

所以基本上这就是我的所作所为:

in body - onload方法我称之为javascript函数

        function TestN() {
            var list = new Array();
            var allElements = document.getElementsByTagName('*');

            $("*[wordNum]").each(function ()
            {
                var endRes = {
                    ControllerName: this.id,
                    WordNumber: this.getAttribute("wordNum")
                };

                list.push(endRes);


            });


            jQuery.ajax({
                url:' @Url.Action("Translate")' ,
                contentType: "application/json",
                dataType: "json",
                data: { List : JSON.stringify(list) }
,
                traditional: true

            })
        }

它的作用 - 它使用属性" WrdNum"搜索所有控件。然后我向MVC Translate行动提出ajax请求!

在翻译行动中,我向填写类型列表的网络服务发出请求 - TranslateModel

public ActionResult Translate(string List)
        {

       List<TranslateModel>listto = WebServiceBea.TranslateList(1, List);

        return View(listto); 

    }

这是我的TranslateModel

 public class TranslateModel
    {
        public string ControllerName { get; set; }
        public string WordNumber { get; set; }
        public string Description { get; set; }
    }

基本上我的问题是 - &gt;我应该返回什么类型的视图 - &gt;以及如何将此列表返回到javascript或jquery函数,该函数必须使用此列表中的记录设置某些html控件的innerHtml属性。**

我现在觉得很奇怪,但那是我的任务


修改

非常感谢你的帮助。但现在我又遇到了另一个问题:

我改变了我的javascript后放了。完成方法所以我可以从服务器获取数据,如下所示:

$(document).ready(function(){             var list = new Array();

        $("*[wordNum]").each(function () {
            var endRes = {
                ControllerName: this.id,
                WordNumber: this.getAttribute("wordNum")
            };

            list.push(endRes);


        });


        jQuery.ajax({
            url: ' @Url.Action("Translate")',
            contentType: "application/json",
            dataType: "json",
            data: { List: JSON.stringify(list) }

,                 传统的:是的,

        }).done(function (result)
        {


           alert ("HII") ;


        });
    });

无论我放入.done函数,它都不会执行。似乎控制器不知道返回结果的位置。 | I |现在不行。可以通过我从.layout页面发出此请求 - 在文档准备就绪上发生的事情发生。小号

3 个答案:

答案 0 :(得分:4)

这看起来像是一个使用knockout js的问候地点。 这里有一个很棒的step by step用于在mvc视图中使用knockout

所以该方法只返回json,视图不会只有一个模型只需要调用json

如果您打算使用$ .post来提取数据,则可以将列表作为json返回

[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult Translate(string List)
{

   List<TranslateModel>listto = WebServiceBea.TranslateList(1, modelObj);

    return Json(listto); 
}

查看您在action方法中发布的内容,它应该已经是该类型的列表。 MVC应该进行繁重的工作并将其转换为您拥有的对象。

如果您想自己处理退货,您可以执行类似

的操作
           jQuery.ajax({
            url:' @Url.Action("Translate")' ,
            contentType: "application/json",
            dataType: "json",
            data: { List : JSON.stringify(list) },
            traditional: true

        }).success(function( returnData, returnStatus)
        {
            //some code to handle the list of objects reutrned
        });

答案 1 :(得分:2)

您已经有了答案,但是如果您可能通过javascript调用控制器操作,请考虑以下事项:

public ActionResult GetItems(string id)
{
    var MyList = db.GetItems(id);//returns a list of items
    if (Request.IsAjaxRequest())//called from javascript via AJAX
        {
            return Json(MyList, JsonRequestBehavior.AllowGet);
        }
        else //regular hyperlink click
        {
            return View(MyList);
        }
}

要使用该列表,请执行以下操作

$.ajax({url: "'@Url.Content("~/controllername/GetItems")?id=' + id"})
 .done(function(result){
        var mylist = result.responseText.evalJSON();//this is your list of items
        for(i=0;i<mylist .length;i++)
        {
            var myitem = mylist[i];
        }

    });

答案 2 :(得分:0)

NEVERRRR NEVERRR Forge放置jsonRequestBehavior.AllowGet

非常感谢大家的帮助