2011-07-07 22 views
1

我正在使用jQuery表單插件進行文件上傳。我的問題是如何使用jquery在腳本部分的視圖中從控制器訪問jsonresult。 我的劇本是如何獲取json結果jQuery的表單插件

$(function() { 
     $("#uploadForm").ajaxForm({ 
       iframe: true, 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       target :"myTable", 
       url: "/UploadFile/Index", 
      success: function(response,statusText) { 
     var jsonObject= result.childNodes[0].innerHTML; 
     for (i = 0; i < response.length; i++) { 
       alert(response.filesList[i]); 
        $('#myTable').append('<tr><td> <a href=' + response.filesList[i] + '></a> td></tr>'); 
       } 
     } 
    } 
     }) 
}) 

,並在我的控制器需要的文件名,並增加了靜態列表字符串類型filesList和

[AcceptVerbs(HttpVerbs.Post)] 
      public JsonResult Index(HttpPostedFileBase file) 
      { 
    string filename = file.FileName; 
       filesList.Add(filename); 
    return new JsonResult 
     { ContentType = "text/plain", 
      Data = Json(new 
       { 
       filesList = filesList.Select(x => "File uploaded successfully " + x) 
       }, JsonRequestBehavior.AllowGet) 
     }; 
} 

但我認爲這是處理JSON結果中的錯誤表示收益爲jsonresult類型腳本,我想要它做的是將filesList附加到表中,以便如何處理腳本中的jsonresult對象。

感謝你, michaeld

+0

您能否在成功函數中顯示json的結構?嘗試console.log與螢火蟲安裝 –

+0

是的尼科拉成功的功能是以錯誤的方式表示,我已經添加了一個想法,但我不清楚究竟寫什麼是json成功,這本身就是我的問題。 – michael

回答

0

如果我理解你的問題,首先你應該重寫控制器。爲什麼在返回json時需要text/html?和字符串的字符串+清單是不可能的,我想你需要的郵件和文件名

[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult Index(HttpPostedFileBase file) 
      { 
       List<String> fileNames = new List<string>(); 

      fileNames.Add(file.FileName); 


      return Json(new 
      { 
       FileNames = fileNames.Select(x=> "File uploaded successfully " + x) 
      }, JsonRequestBehavior.AllowGet); 
} 

然後在客戶端列表中,直接使用result對象,設置具體的數據類型=「JSON」,它已經是json對象

success: function(result) { 
     for (i = 0; i < result.FileNames; i++) { 
     $('#myTable').append('<tr><td> <a href=' + result.FileNames[i] + '></a> td></tr>'); 
     } 
    } 
+0

嗨,archil,我想在我的代碼中嘗試這個,但unfortunatley我被擊中fileNames.Select列表不包含Select的定義。我能做什麼?還有JsonRequestBehavior.AllowGet實際上做了什麼? – michael

+0

添加使用System.Linq;到你的類 – archil

+0

確定添加,但爲什麼我提交後我得到一個彈出式應用程序/ JSON類型的保存文件窗口,假設如果我說保存它是與按鈕的名稱保存,甚至表也不會生成 – michael

0

其實要附加到表ID爲MYTABLE很多表行。我不明白你想要什麼,我試着猜測。 如果要附加的文件名列表,我認爲你應該做的:

var jsonObject= result.childNodes[0].innerHTML; 
    var html = '<ul>'; 
    for (i = 0; i < jsonObject.length; i++) { 
     html += '<li> <a href=' + jsonObject[i].message + '></a> </li>' 
    } 
    html += '</ul>'; 
    $('#mytable').after(html); 
} 
+0

嗨nicola,添加上面的代碼提交後,而不是得到表我得到一個保存fileas彈出窗口與文件名作爲按鈕名稱,什麼可能是問題,ithink是因爲json對象,我怎麼能避免該彈出並顯示錶格? – michael

+0

問題是因爲控制器中的返回類型,對於這個成功函數類型,應該是jquery中的dataType和控制器中的返回類型。 – michael

相關問題