你好,

我确信我在这里遗漏了一些非常明显的东西,所以请原谅我。

  • 我在用着 MVC 2 测试版 我有一个具有多个属性、字符串、整数等的模型。通常的东西。
  • 它还有一个包含图像的字节数组。
  • 我的控制器上有一个用 [HTTPGet] 属性装饰的编辑操作方法。
  • 该方法将模型传递给视图,视图是一种表单,具有绑定到各种字符串属性的常用文本框和绑定到字节数组/图像的 img 元素。

这一切都按预期工作,我看到了包括图像在内的所有数据。这都是非常标准的东西。

但是,当用户将表单提交到我的 [HTTPPost] 版本的操作方法(该方法接受相同的模型作为其参数)时,图像属性为 null。IE。图像属性似乎不是模型绑定的一部分。

在正常的事件过程中,我们会进行一些验证并将模型传递回要渲染的视图,以便用户可以查看编辑是否成功。但只是“按原样”将模型传递回去 - 视图不会再次渲染图像,因为它不再位于模型中。

我知道我可以再次获取图像(从数据库或任何地方)并将其放回模型中,然后再将其传递到视图,但是 这是正确的策略还是我错过了什么?

问候,西蒙

有帮助吗?

解决方案

如何渲染模型中作为二进制数据包含的图像?您是否使用经典的 Webforms 控件(mvc 术语中不推荐的控件)?无论如何,如果图像仅显示在视图中,则当用户提交表单时,它不会发布,因为只有输入字段(复选框、文本字段、隐藏字段)被提交到服务器。图像元素不是。请记住,在 MVC 中,简单的 HTML 完成了将数据发布到服务器的所有工作 - 没有视图状态,也没有自动回发来保存控件的状态。您有两种解决方案:

  1. 在某个隐藏字段中对二进制数据进行编码,以便再次发布。
  2. (更好)不要在客户端和服务器之间来回发送图像数据,而是检测用户是否提供了新图像(我希望您为此使用文件输入),如果用户将文件输入留空,则更新模型与已存储在数据库中的图像可以再次显示。否则更新数据库中的图像。

不管怎样,我很好奇如何在模型中显示二进制数据的图像。我认为创建一些返回二进制数据的控制器操作会更简单,这样您就可以在 img 标记的 src 属性中使用该操作的 URL,或者将图像存储为文件并使用它们的 URL 而不是二进制数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top