我正在构建一个小型DNN MVC模块,我需要一个用户上传文件,该文件将在服务器端处理。
当回发表单时,视图模型会很好地回发,但文件永远不会。 Request.Files始终为0.
我甚至简化了它,所以我在模块上只有一个简单的文件输入和提交按钮,但也失败了。
我不想恢复到.ascx控件以使其工作。
我将其作为未注册用户进行测试,因此控制器中没有身份验证检查。
见下面的代码:
查看
@inherits DotNetNuke.Web.Mvc.Framework.DnnWebViewPage<NM.Modules.FlexEventsCreate.Models.FlexEventViewModel>
@using DotNetNuke.Web.Mvc.Helpers
<input type="file" id="fileUp"/>
<input type="submit" id="btnSubmit" />
控制器
[DnnHandleError]
public class ItemController : DnnController
{
[HttpPost]
public ActionResult ShowForm(FlexEventViewModel flexEvent)
{
if (ModelState.IsValid)
{
var file = Request.Files;
if (file.Count != 0)
{
//do something
}
//return RedirectToDefaultRoute();
}
return View(flexEvent);
}
}
渲染的DNN HTML看起来像这样(我简化了它)
<form method="post" action="/Test" id="Form" enctype="multipart/form-data">
<!-- Begin Content areas -->
<div>
<div class="row">
<div class="medium-9 columns">
<div id="dnn_LeftPane">
<div class="DnnModule DnnModule-DnnModule-747">
<a name="747"></a>
<div class="DnnF_Title_h1 SpacingBottom">
<h1><span id="dnn_ctr747_dnnTITLE_titleLabel" class="TitleH1"></span>
</h1>
<div id="dnn_ctr747_ContentPane">
<!-- Start_Module_747 -->
<div id="dnn_ctr747_ModuleContent">
<div id="dnn_ctr747_ShowForm_Prog" class="RadAjax RadAjax_Default" style="display:none;">
<div class="raDiv">
</div>
<div class="raColor raTransp">
</div>
</div>
<div class="RadAjaxPanel" id="dnn_ctr747_dnn_ctr747_ShowForm_UPPanel">
<div id="dnn_ctr747_ShowForm_UP">
<!-- 2013.2.717.40 -->
<div id="mvcContainer-747">
<input type="file" id="fileUp">
<input type="submit" id="btnSubmit">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
答案 0 :(得分:1)
我确实使用dropzone jquery component在MVC模块中上传 - 这可能会对您有所帮助。请参阅github上的示例Restaurant Menu project。
首先,包括dropzone脚本和css:
//The stuff above this
else if(aga == 'y'){
System.out.println("Please wait!");
aw = 0;
}
//The rest of your code`
然后为上传组件放置一个容器div:
@using DotNetNuke.Web.Client.ClientResourceManagement
@{
ClientResourceManager.RegisterStyleSheet(Dnn.DnnPage, "~/DesktopModules/MVC/DotNetNuclear/RestaurantMenu/Resources/dropzone/css/dropzone.css");
ClientResourceManager.RegisterScript(Dnn.DnnPage, "~/DesktopModules/MVC/DotNetNuclear/RestaurantMenu/Resources/dropzone/js/dropzone.min.js", 100);
}
初始化组件并告诉它可以上载的文件类型和数量:
<div id="dZUpload" class="uploadform dropzone no-margin dz-clickable">
<div class="dz-default dz-message"></div>
</div>
将acceptedFiles更改为您要限制的mimetypes(&#34; application / pdf&#34;等)。更改maxFiles以限制他们一次可以上传的文件数量。
编写MVC控制器操作以响应Dropzone文件上传URL。你可以看到它需要一种动作方法&#34;上传&#34;在控制器&#34;菜单&#34; (MenuController.Upload):
$("#dZUpload").dropzone({
acceptedFiles: "image/jpeg,image/png,image/gif",
url: '@Url.Action("Upload", "Menu")',
maxFiles: 1, // Number of files at a time
maxFilesize: 1, //in MB
addRemoveLinks: true,
maxfilesexceeded: function (file) {
alert('You have uploaded more than 1 Image. Only the first file will be uploaded!');
},
success: function (response) {
}
});