2012-01-24 58 views
2

我正在使用Telerik Extensions for ASP.NET MVC 3,並且遇到了上傳控件的問題。我想在同一頁面上有多個上傳控件(例如,我要求提供圖片和聲音文件)。問題是,只有第一個上傳控件有效。頁面上的其他任何人都可以正常顯示,點擊它們仍然會彈出文件選擇對話框,但實際上沒有人會響應,除了第一個。多頁Telerik MVC每頁上傳控件?

Telerik似乎沒有報告任何控制檯或任何錯誤,它只是不起作用。有什麼具體的我必須做一個頁面上允許多個上傳控件?

爲了證明,這是斷碼不起作用:

@(Html.Telerik().Upload() 
    .Name("attachments") 
    .Async(async => async.Save("Save", "Resource").AutoUpload(true)) 
    .ClientEvents(events => events 
     .OnSuccess("ItemImageOnSuccess") 
     .OnError("ItemImageOnError") 
    ) 
) 

@(Html.Telerik().Upload() 
    .Name("attachments") 
    .Async(async => async.Save("Save", "Resource").AutoUpload(true)) 
    .ClientEvents(events => events 
     .OnSuccess("ItemSoundOnSuccess") 
     .OnError("ItemSoundOnError") 
    ) 
) 

第二場上傳正確渲染,但不工作。

回答

6

對於遇到類似問題的其他人,我設法自己解決。
我的問題是,我有所有上傳控件在頁面上具有相同的名稱,這反過來又給了他們相同的ID,所以Telerik的所有JavaScript只能在第一個上傳控件。修復很明顯:更改名稱。

但是,這引入了一個新問題,因爲我使用的所有Upload控件都指向相同的函數,並且在更改控件的名稱時,參數沒有正確映射,我只是得到一個null文件列表。要修復這個問題,我需要爲.Save()函數添加一個額外的參數來告訴它字段名稱。

這裏是修復上面我的代碼:

@(Html.Telerik().Upload() 
    .Name("ImageUpload") 
    .Async(async => async.Save("Save", "Resource", "attachments").AutoUpload(true)) 
    .ClientEvents(events => events 
     .OnSuccess("ItemImageOnSuccess") 
     .OnError("ItemImageOnError") 
    ) 
) 

@(Html.Telerik().Upload() 
    .Name("SoundUpload") 
    .Async(async => async.Save("Save", "Resource", "attachments").AutoUpload(true)) 
    .ClientEvents(events => events 
     .OnSuccess("ItemSoundOnSuccess") 
     .OnError("ItemSoundOnError") 
    ) 
) 
+0

謝謝,您的文章救了我的無奈小時! – Paul