0

我正在尝试使用 Uploadify 将文件上传到服务器,但无法使用 TempData 在控制器之间传递变量,并且我没有发现错误。

我正在尝试将变量 fileName 和带有控制器“GetFile”的 TempData 的文件传递给控制器​​“ModelCreate”。

控制器“GetFile”运行良好,但是当我检查控制器“ModelCreate”中“date1”和“date2”的值时为空

我只想将文件保存在控制器“ModelCreate”中

  public string GetFile(HttpPostedFileBase file)
        {
            var fileName = this.Server.MapPath("~/Informs/" + System.IO.Path.GetFileName(file.FileName));

            if (System.IO.File.Exists(fileName))
                return "has been uploaded successfully";
            file.SaveAs(fileName);

            TempData["NameFile"] = fileName;
            TempData["File"] = file;
            return "1";
        }


        [HttpPost]
        public ActionResult ModelCreate(INFORME inform)
       {
            var date1 = TempData["NameFile"] as string;
            var date2 = TempData["File"] as HttpPostedFileBase;
            date2.SaveAs(date1);
        .
        .
        .
        .
        }

为什么“date1”和“date2”为空?

祝福

4

1 回答 1

2

没有足够的信息来回答这个问题。根据评论部分的要求,我将提供一个完整的示例,说明一个允许用户填写几个输入字段并上传文件的表单。

与往常一样,我们首先定义视图模型,该模型将反映我们想要在视图上显示的信息:

public class MyViewModel
{
    [Required]
    public string TextField { get; set; }

    [DataType(DataType.MultilineText)]
    public string TextAreaField { get; set; }

    public bool CheckBoxField { get; set; }

    [Required]
    public HttpPostedFileBase FileField { get; set; }
}

然后我们可以有一个带有 2 个动作的控制器:一个简单地显示表单的 GET 动作和一个在提交时处理表单信息的 POST 动作:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        if (!ModelState.IsValid)
        {
            // there were validation errors => redisplay the view
            return View(model);
        }

        // at this stage the model is valid => we could do some processing

        // first let's save the file
        var appData = Server.MapPath("~/app_data");
        var file = Path.Combine(appData, Path.GetFileName(model.FileField.FileName));
        model.FileField.SaveAs(file);

        // then we could process the other properties
        // ...

        return Content("Thanks for submitting the data");
    }
}

最后是视图模型顶部的强类型视图:

@model MyViewModel

@Html.ValidationSummary(false)

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div>
        @Html.EditorFor(x => x.TextField)
        @Html.ValidationMessageFor(x => x.TextField)
    </div>

    <div>
        @Html.EditorFor(x => x.TextAreaField)
        @Html.ValidationMessageFor(x => x.TextAreaField)
    </div>

    <div>
        @Html.CheckBoxFor(x => x.CheckBoxField)
        @Html.ValidationMessageFor(x => x.CheckBoxField)
    </div>

    <div>
        @Html.LabelFor(x => x.FileField)
        @Html.TextBoxFor(x => x.FileField, new { type = "file" })
    </div>

    <button type="submit">OK</button>
}
于 2012-05-28T08:11:44.363 回答