DNN MVC模块没有发回文件

时间:2017-07-26 09:49:55

标签: asp.net-mvc file post dotnetnuke dnn-module

我正在构建一个小型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>

1 个答案:

答案 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) {

    }
});