0

你好,

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

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

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

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

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

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

问候,西蒙

4

1 回答 1

0

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

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

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

于 2009-12-11T22:03:00.567 回答