1

次のように、型指定されていない ViewMasterPage を使用する ASP.NET MVC Preview 3 (Preview 2 ソリューションからアップグレードされた) を使用した実用的なソリューションがありました。

public partial class Home : ViewMasterPage

Home.Master には、次のような表示ステートメントがあります。

<%= ((GenericViewData)ViewData["Generic"]).Skin %>

ただし、チームの開発者がアセンブリ参照を Preview 4 に変更したばかりです。

これに続いて、コードは上記のようなインデックス付きの値で ViewData を設定しなくなります。

代わりに、ViewData["Generic"] は null です。

この質問に従って、ViewData.Eval("Generic") が機能し、ViewData.Model も正しく入力されます。

ただし、このソリューションが型付きページなどを使用していない理由は、それが一種のレガシー ソリューションであるためです。そのため、このかなり大規模なソリューションを実行してすべての .aspx ページを更新することは非現実的です (特に、コンパイラはこの種のものを検出しないため)。

参照を削除してから、プロジェクトの「bin」フォルダーにある Preview 3 アセンブリへの参照を追加して、アセンブリを元に戻そうとしました。これは何も変わりませんでした。プロジェクト ファイルを以前のバージョンに戻そうとしましたが、それでも問題は解決していないようです。

同じ手法を使用して引き続き機能する他のソリューションがあります。

これが突然機能しなくなった理由と、それを修正する方法について提案できることはありますか (正しい方向へのヒントをいただければ幸いです)。

4

5 に答える 5

1

[] インデクサーとの対称性が少し必要だったので、この変更を行いました。Eval() メソッドはリフレクションを使用し、モデルを調べて値を取得します。インデクサーは、ディクショナリに直接追加された項目のみを調べます。

于 2008-09-18T16:04:29.547 に答える
0

ええ、そのため、ビューに渡すものはすべて、ビューで ViewData.Model としてアクセスできます。しかし、強く型付けされたビューを実行しないと、それは単なる古き良きオブジェクトになります...

于 2008-09-15T14:16:48.067 に答える
0

ViewData["blah"] のすべてのインスタンスを ViewData.Eval("blah") に置き換えることにしました。ただし、可能であれば、この変更の原因を知りたいです。理由は次のとおりです。

  1. 私の他のプロジェクトで発生した場合は、修正できれば幸いです。
  2. これらの変更で上書きせずに、デプロイされた作業コードを残しておくとよいでしょう。
  3. 私が気づいていないことは他に何も変わっていないことを知ってうれしいです.
于 2008-09-15T02:45:26.637 に答える
0

ビューデータをどのように設定していますか?これは私のために働く:

コントローラ:

ViewData["CategoryName"] = a.Name;

意見:

<%= ViewData["CategoryName"] %>

ところで、私は現在 Preview 5 を使用しています。しかし、これは3と4で機能しました...

于 2008-09-15T03:45:53.717 に答える
0

Re: リッキー

コントローラーから View() メソッドを呼び出すときに、オブジェクトを渡しているだけです。

また、何も更新されていないデプロイ済みサーバーで ViewData.Eval が失敗し、ViewData["index"] が機能することにも気付きました。

私の開発サーバーで ViewData["index"] が失敗し、ViewData.Eval が機能します...

于 2008-09-15T04:02:04.627 に答える