【问题标题】:asp.net image in a form and HTTPPost表单中的 asp.net 图像和 HTTPPost
【发布时间】:2009-12-12 06:03:00
【问题描述】:

嗨,

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

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

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

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

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

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

问候, 西蒙

【问题讨论】:

    标签: asp.net-mvc image model-binding


    【解决方案1】:

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

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

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

    【讨论】:

    • 潘,感谢您对图像元素的澄清。图像数据不会被回发是有道理的。当我更仔细地查看我的代码时,我所做的就是按照您的建议使用控制器操作方法作为图像标签的来源。在发布问题之前,我应该更仔细地查看我的代码(尴尬)。不过再次感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多