0

こんにちは、

ここで非常に明白な何かが欠けていると確信しているので、ご容赦ください。

  • 私はMVC 2 Betaを使用しており、いくつかのプロパティ、文字列、int などの通常のものを持つモデルがあります。
  • また、イメージを含むバイト配列もあります。
  • [HTTPGet] 属性で装飾された編集アクション メソッドがコントローラーにあります。
  • このメソッドは、モデルをビューに渡します。ビューは、さまざまな文字列プロパティにバインドする通常のテキスト ボックスと、バイト配列/画像にバインドされる img 要素を持つフォームです。

これはすべて正常に機能し、画像を含むすべてのデータが表示されます。これはすべてかなり標準的なものです。

しかし、ユーザーが同じモデルをパラメーターとして受け入れる [HTTPPost] バージョンのアクション メソッドにフォームを送信すると、image プロパティは null になります。つまり、image プロパティはモデル バインディングの一部ではないようです。

イベントの通常の過程では、いくつかの検証を行い、モデルをビューに戻してレンダリングし、ユーザーが編集が成功したかどうかを確認できるようにします。ただし、モデルを「そのまま」戻すだけです。ビューはモデルに存在しないため、画像を再度レンダリングしません。

ビューに渡す前に(データベースまたはどこからでも)画像を再度取得してモデルに戻すことができることはわかっていますが、それは正しい戦略ですか、それとも何かを見逃していますか?

よろしく、サイモン

4

1 に答える 1

0

モデルにバイナリデータとして含まれている画像をどのようにレンダリングしますか?従来のWebフォームコントロールを使用していますか(MVC用語では推奨されないもの)?とにかく、画像がビューにのみ表示される場合、入力フィールド(チェックボックス、テキストフィールド、非表示)のみがサーバーに送信されるため、ユーザーがフォームを送信したときに画像は投稿されません。画像要素はそうではありません。MVCでは、サーバーにデータを投稿するすべての作業を行うのは単純なHTMLであることに注意してください。コントロールの状態を保持するビューステートも、自動ポストバックもありません。2つの解決策があります。

  1. バイナリデータを非表示のフィールドにエンコードして、再度投稿されるようにします。
  2. (より良い)クライアントとサーバー間で画像データをやり取りしないでください。ただし、ユーザーが新しい画像を提供したかどうかを検出し(そのためにファイル入力を使用することを期待します)、ユーザーがファイル入力を空のままにした場合は、すでにデータベースに保存されている画像を使用してモデルを作成し、再度表示します。それ以外の場合は、データベースのイメージを更新します。

とにかく、モデルのバイナリデータから画像をどのように表示するのか興味があります。バイナリデータを返すコントローラーアクションを作成して、そのアクションのURLをimgタグのsrc属性で使用したり、画像をファイルとして保存してバイナリデータの代わりにそのURLを使用したりする方が簡単だと思います。

于 2009-12-11T22:03:00.567 に答える