2014-05-21 29 views
0

所以基本上這是我做的:使得阿賈克斯要求MVC控制器 - 但.done函數從不執行

身體 - 的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請求!

在翻譯行動我讓到填充類型列表的Web服務請求 - 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; } 
    } 

所以基本上我的問題是 - >我應該返回什麼類型的視圖 - >以及如何將此列表返回到必須使用此列表中的記錄設置某些html控件的innerHtml屬性的javascript或jquery函數。**

我現在很奇怪,但是這是我的任務


編輯

感謝這麼多的幫助。但現在我有另一個問題:

我改變了我的JavaScript後,把。 done方法,所以我可以從服務器獲取數據,它看起來是這樣的:

$(文件)。就緒(函數(){VAR 名單=新的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頁面上 - 準備好文檔。 s

+1

這種的*僅*從JavaScript調用?如果是這樣,最簡單的事情就是將列表返回爲json並用javascript解析它? – mituw16

回答

4

這看起來像一個歡迎地點使用knockout js。 這裏是利用基因敲除與MVC視圖

所以這種方法只能返回JSON很大step by step,認爲不會有一個模型,只需要打一個電話,以獲得JSON

,如果你要使用$ .POST拉你的數據,你可以回到你的列表作爲JSON

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

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

    return Json(listto); 
} 

看着你被髮布到操作方法是什麼,它應該已經是該類型的列表。 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 
     }); 
+0

你好 - 非常感謝你!我添加了一些我認爲可以澄清情況的代碼。我會非常感謝你的幫助 –

+0

發送清單到行動的目的是什麼?你不想從基於某些var的動作獲取列表?只需要一些澄清。 – workabyte

+0

因此,當我said當MVC停止渲染視圖和html準備好時,我已經得到了一些特殊的控制權屬性「wrdNum」。我體現了他們的價值觀並將其發送給Action Translate。比基於該參數翻譯動作填充列表;並以某種方式這個列表必須由JavaScript函數接收,所以我可以設置這些特殊控件的一些屬性 –

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]; 
     } 

    }); 
+0

你能幫助我 - 如何得到這個列表中的javascript:也許在ajax請求我應該把成功:SOmeFunction() –

0

NEVERRRR NEVERRR鍛造把jsonRequestBehavior.AllowGet

非常感謝大家的幫助