0

2007年の冬に書かれたこの非常にクールな記事は私にこのコードを示しています:

public static class TempDataExtensions
{
  public static void PopulateFrom(this TempDataDictionary tempData, object o)
  {
    foreach (PropertyValue property in o.GetProperties())
    {
      tempData[property.Name] = property.Value;
    }
  }

  public static void PopulateFrom(this TempDataDictionary tempData
    , NameValueCollection nameValueCollection)
  {
    foreach (string key in nameValueCollection.Keys)
      tempData[key] = nameValueCollection[key];
  }

  public static void PopulateFrom(this TempDataDictionary tempData
    , IDictionary<string, object> dictionary)
  {
    foreach (string key in dictionary.Keys)
      tempData[key] = dictionary[key];
  }

  public static string SafeGet(this TempDataDictionary tempData, string key)
  { 
    object value;
    if (!tempData.TryGetValue(key, out value))
      return string.Empty;
    return value.ToString();
  }
}

MVCContribソースまたはMVC2ソースにこのようなコードは表示されません。これにより、現在のMVC2リリース(MVC3プレビュー1にある可能性があります)にすでに存在する同等の機能を恐れることなく、このパターンを今でも使用できると思います。

記事の更新編集は見られませんでした。2007年のこのMVCコードは、時の試練に耐えますか?今のところまだ準備はできていますか?

4

1 に答える 1

1

はい、これは機能し、この機能は置き換えられません。

1つの警告。MVC 1では、一時データは1つのリクエストに対してのみ保持されていました。MVC 2では、tempdataにアクセスするか、手動でクリアするまで、tempdataが残ります。これにより、リダイレクトが失敗したり、一時データが読み取られなかったりすると、事態が複雑になる可能性があります。

新しい動的キーワードも同様の機能を提供します。おそらく、新しい新しいC#4.0動的タイプは少しクリーンアップする可能性があります。

于 2010-07-31T03:35:30.060 に答える