MVC中如何将视图模型Guid值传递给Upload控制器ChunkSave方法
问题:Kendo Upload分块上传时无法传递Guid参数到控制器
我有一个文件上传控制器,作为包含Kendo Core MVC Upload控件的EditorTemplate后端,需要让EditorTemplate独立运行并传递Guid类型的记录ID来维持关联。当前上传时,请求能正常到达ChunkSave方法,但添加的Guid? idCode参数始终无法获取到视图模型里的Guid值。
解决方案
方法1:通过Upload的additional-data传递参数
利用Kendo Upload的additional-data配置,通过JS动态获取Guid值并作为额外参数传递,分块请求会自动带上该参数。
修改EditorTemplate代码:
@model Guid? @{ string[] extensions = { ".jpg", ".png", ".pdf", ".ppt", ".pptx", ".doc", ".docx", ".xls", ".xlsx" }; } @Html.HiddenFor(m => m, new { id = "idCodeHidden" }) <kendo-upload name="letterFiles" multiple="true"> <async save-url="@Url.Action("ChunkSave","Upload")" remove-url="@Url.Action("Remove","Upload")" auto-upload="true" chunk-size="11000" additional-data="additionalData" /> <validation allowed-extensions="@extensions" max-file-size="36700160" /> </kendo-upload> <script> function additionalData() { return { idCode: $("#idCodeHidden").val() }; } </script>
方法2:在SaveUrl中直接拼接Guid参数
如果Guid值在渲染EditorTemplate时已确定,可直接将其拼接到请求Url中,分块请求会自动携带该查询参数。
修改EditorTemplate中的Async配置:
<async save-url="@Url.Action("ChunkSave","Upload", new { idCode = Model })" remove-url="@Url.Action("Remove","Upload")" auto-upload="true" chunk-size="11000" />
额外注意事项
- 检查
@Html.HiddenFor(m => m)生成的隐藏输入框是否包含正确的Guid值,可通过浏览器开发者工具验证。 - 若使用方法1,需确保隐藏控件ID唯一,避免页面元素冲突。
- 控制器
ChunkSave方法中的idCode参数无需添加[Bind(Prefix)],因为它是独立传递的参数。
内容的提问来源于stack exchange,提问作者DoomerDGR8
相关产品推荐
相关产品推荐

