2012-01-24 39 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