【问题标题】:Set file control value from model in asp.net mvc3 razor从 asp.net mvc3 razor 中的模型设置文件控制值
【发布时间】:2012-11-18 15:31:14
【问题描述】:

在我的 MVC 应用程序中,我将以下代码用于文件。

型号

public HttpPostedFileBase File { get; set; }

查看

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

一切正常......提交价值但我正在尝试从不工作的控制器模型加载文件

控制器

public ActionResult ManagePhotos(ManagePhoto model)
{
    if(ModelState.IsValid)
    {
           //upload file
    }
    else
    {
          return View(model); //contains type HttpPostedFileBase File { get; set; }
    }
}

如果我的验证失败,我如何再次加载文件输入,因为返回后,我的文件控件没有映射到模型到文件并且它是空的...

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 file-upload razor model


    【解决方案1】:

    如果您知道该文件是有效的,并且想暂时保留它,您可以将其保留在会话中(但要注意内存使用情况)。

    如果您知道该文件是有效的,并且想要永久保留它,请保存它并将路径保留在内存中。

    如果您知道该文件无效,您不会想要也经常无法保留它。

    这通常在验证失败期间以与密码相同的方式处理 - 需要再次提供,因此只有在其他一切正常时才会请求。

    【讨论】:

    • 因为我有几个其他文件,我需要在同一次提交中保存所有文件。所以在所有日期都有效之前我无法保存,我认为会话不是我暂时存储文件的选项你对此有任何其他想法吗?
    • 那么你要么必须将它们保存在服务器内存中,要么将它们保存在服务器文件存储中,或者每次都要求客户端重新上传它们。您可以将它们保存在临时文件夹中的文件系统中,然后如果提交成功,则从临时文件夹移动到永久存储。
    • 对此我有一个问题,因为如果用户不执行add operation 以及用户退出应用程序,删除临时文件夹将是开销,并且我在服务器上的存储空间有限。
    【解决方案2】:

    如果您想尽最大努力让用户体验无缝,请尝试以下操作:

    1. 在客户端添加 javascript 以验证用户输入
    2. 在服务器端临时存储tmp文件存储上的所有文件。清理超过 10 分钟的文件。当您需要将文件保存到存储中时,请执行此操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2012-05-01
      相关资源
      最近更新 更多