dea*_*_au 2 file-upload telerik-mvc razor asp.net-mvc-3
我正在使用Telerik Extensions for ASP.NET MVC 3,我遇到了上传控件的问题.我想在同一页面上有多个上传控件(例如,我要求提供图像和声音文件).问题是,只有第一个上传控件有效.页面上的任何其他人都可以正常渲染,点击它们仍会显示文件选择对话框,但除第一个之外没有其他任何实际响应.
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")
)
)
Run Code Online (Sandbox Code Playgroud)
第二个上载字段正确呈现,但不起作用.
对于遇到类似问题的其他人,我设法自己解决了.
我的问题是我在页面上的所有上传控件都有相同的名称,这反过来给了他们相同的ID,所以Telerik的所有javascript只能在第一个上传控件上运行.修复很明显:更改名称.
但是,这引入了一个新问题,因为我使用的所有上传控件都指向相同的函数,并且在更改控件的名称时,参数不再正确映射,我只是得到一个空文件列表.要解决此问题,我需要在.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")
)
)
Run Code Online (Sandbox Code Playgroud)