2011-03-17 77 views
0

我已經在我的cshtml詳細信息視圖中獲得此代碼。我想將VM發送回該控制器方法。這可以工作,因爲我可以在控制器中設置斷點,但模型爲空。下面是客戶端不顯眼的Ajax調用不發送查看模型返回到控制器

function downLoadFile() { 

    $.ajax({ 
     url: '/Software/DownLoadInstall', 
     type: "POST", 
     data: JSON.stringify('@Model'), 
     datatype: "json", 
     contentType: "application/json; charset=utf-8" 
    }); 
} 

,並在這裏是我的控制器看起來像

[HttpPost] 
    public ActionResult DownLoadInstall(SoftwareEditViewModel vm) 
    { 
     try 
     { 
      SoftwareService.DownLoadInstall(vm); 

      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

回答

3

我認爲這是不可能的複雜模型會產生一個合理的字符串表示JSON.stringify可以使用。只需傳遞要下載的項目的標識(可能包含在模型中)即可。如果下載意味着我的想法,那麼它確實應該返回一個FileResult,並且之後不應該重定向。也不需要使用AJAX,因爲文件下載不會將您帶離頁面。我根據你的命名做出一些大的假設 - 如果我錯了,你真的應該使用更好的名字。

[HttpPost] 
public ActionResult DownLoadInstall(int id) 
{ 
    return SoftwareService.DownLoadInstall(ModelFromID(id)); 
} 

private SoftwareViewModel ModelFromID(id) 
{ 
    ... populate the model needed for download from id ... 
} 

客戶

function downLoadFile() { 
    location.href = '/software/downloadinstall/' + @Model.ID; 
} 
+0

tvanfosson THX ......你這樣做是正確有關目的。我們公司有30個直流電,每個國家都有自己的本地驅動器映射可下載軟件。所以,我必須使用Response.WriteFile將文件流式傳輸回來,然後執行「net use」從適當的登錄服務器下載文件。我不遵循我不需要使用Ajax。我有兩個按鈕和詳細信息頁面...他們可以下載和查看幫助文件,或者他們可以下載實際安裝。對不起,如果TMI我這個小紙條。 Thx的偉大答覆。 – Bayrat 2011-03-17 12:54:12

+0

直到你剛剛提到它,你甚至都不知道FileResult。這看起來像要走的路......我以傳統的ASPX模式構建了這個應用程序的原型,現在已經在MVC3中重做了它......這是一個巨大的幫助,感謝參考...這裏是一個偉大的寫作它http://stackoverflow.com/questions/1187261/whats-the-difference-between-the-four-file-results-in-asp-net-mvc – Bayrat 2011-03-17 13:09:10

2

調用@Model就叫ToString()的對象。

您需要先將Model轉換爲json。

例擴展方法

public static class JsonHelperExtensions 
{ 
    static readonly JavaScriptSerializer Serializer = new JavaScriptSerializer(); 
    public static string ToJson(this object o) 
    { 
     return Serializer.Serialize(o); 
    } 
} 
在jQuery函數

然後:

function downLoadFile() { 

    $.ajax({ 
     url: '/Software/DownLoadInstall', 
     type: "POST", 
     data: JSON.stringify('@Model.ToJson()'), 
     datatype: "json", 
     contentType: "application/json; charset=utf-8" 
    }); 
} 
相關問題