将文件和模型传递到一个动作asp.net中

本文关键字:一个 asp net 模型 文件 | 更新日期: 2023-09-27 18:18:34

我有一个表单和一个上传器(我使用PLUploader),并希望用户填写文本框和选择图像在PLUploader,当点击提交按钮,我将图像和文本框的值传递给一个动作,我写了这段代码,但我总是在文本框的值中得到空值,但在动作中得到图像。

我认为这个问题与调用表单和PLuploader的一个动作有关。

public ActionResult Insert(News news, HttpPostedFileBase file)
{
    // I get null in new but get file in HttpPostedFileBase
    int result = 0;
    HttpPostedFileBase FileData = Request.Files[0];
    string fileName = null;
    fileName = Path.GetFileName(FileData.FileName);
    if (ModelState.IsValid)
    {
       //do some thing
    }
    else
    {
        return View(news);
    }
}
@using (Html.BeginForm("Insert", "News", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="col-xs-12">
        @Html.LabelFor(model => model.NewsTitle)
        @Html.TextBoxFor(model => model.NewsTitle, new { @class = "form-control",@name="title" })
        @Html.ValidationMessageFor(model => model.NewsTitle)
    </div>
    <div class="col-xs-12">
        <div id="uploader" class="img-plc">
            <p>You browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.</p>
        </div>
        <ul id="gallery"></ul>
    </div>
    <div class="col-xs-12">
        @Html.LabelFor(model => model.NewsText, new { @class = "text-right" })
        @Html.ValidationMessageFor(model => model.NewsText)
        @Html.TextAreaFor(model => model.NewsText, new { @rows = "10", @cols = "80", @class = "text-editor", @name = "title" })
    </div>
    <button type="submit">Submit</button>
}
var uploader = $("#uploader").pluploadQueue({
                // General settings
                runtimes: 'html5,gears,flash,silverlight,browserplus,html4',
                url: '@Url.Action("Insert", "News")',
                max_file_size: '10mb',
                chunk_size: '1mb',
                unique_names: true,
                multi_selection: false,
                multiple_queues: false,
                // Specify what files to browse for
                filters: [
                    { title: "Image files", extensions: "jpg,png" }
                ],
                // Flash settings
                flash_swf_url: '/Scripts/Moxie.swf',
                // Silverlight settings
                silverlight_xap_url: '/Scripts/Moxie.xap'
            })
    $('form').submit(function (e) {
                var uploader = $('#uploader').pluploadQueue();
                // Files in queue upload them first
                if (uploader.files.length > 0) {
                    // When all files are uploaded submit form
                    uploader.bind('StateChanged', function () {
                        if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
                            $('form')[0].submit();
                        }
                    });
                    uploader.start();
                } else {
                    alert('You must queue at least one file.');
                }
                return false;
            });

我该如何解决这个问题?我想在这个动作中获取新闻和文件

将文件和模型传递到一个动作asp.net中

创建包含两个属性的ViewModel

public class NewsViewModel {
    public News News { get; set; }
    public HttpPostedFileBase File { get; set; }
}
public ActionResult Insert(NewsViewModel model) {
    /* ... */
}

创建视图时,将ViewModel传递给视图。确保为输入字段使用正确的名称以使其正确绑定:

 @Html.TextBoxFor(model => model.File, new { type = "file" })