2011-11-16 75 views
2

我們正在使用knockoutjs postJson util提交一個asp.net mvc視圖表單。所有的工作都很好,但現在我們想在表單中添加一個文件上傳選項。發佈視圖模型和上傳文件與asp.net mvc 3和knockoutjs

Uploading file in asp.net mvc,我們添加元素和ENCTYPE =「的multipart/form-data的」的形式屬性,但我們不會在控制器

獲得在Request.Files收集任何文件有什麼問題使用ko.utils.postJson?有沒有更好的方式來上傳文件以及我的表單數據?

  1. 我所有的元素使用KO結合,從而無法刪除淘汰賽
  2. 我們使用postJson,以便它可以模擬表單提交和控制器可以重定向到另一個視圖

回答

1

postJson SRC是做在其上創建每個輸入一個JSON.stringify和在將其插入作爲輸入元件爲內部形式的元素:

for (var key in data) { 
    var input = document.createElement("INPUT"); 
    input.name = key; 
    input.value = ko.utils.stringifyJson(ko.utils.unwrapObservable(data[key])); 
    form.appendChild(input); 
} 

這樣,F來自文件輸入的文件數據無法通過javascript加載,通過postJson調用進行發佈,因爲它目前存在,所以最好的辦法就是上傳文件並將JSON發佈到兩個單獨的請求中。也可以將文件輸入注入到這種形式的postJson方法中(通過重寫該方法),但是它的一種hacky並且可能不是向前兼容的。

+0

我沒有使用Html.TextBoxFor類型的語法,所以不知道它將如何與控制器模型綁定。我在每個輸入上使用KO數據綁定並選擇元素;我正在使用jquery驗證/提交處理程序來調用viewModel保存方法,它依次使用postJson提交。早些時候我使用$ ajax。我是JavaScript新手,所以肯定缺少一些基礎知識 –

+0

模型聯編程序用於數據從客戶端返回到服務器(並反序列化到您的動作參數)這就是我的意思。它可以解釋JSON或標準格式的發佈數據,因此您可以使用。 –

+0

你能告訴我如何做到這一點?我有一個與服務器模型相匹配的KO viewModel。我如何顯式提交viewModel +文件輸入到服務器 –

相關問題