代码之家  ›  专栏  ›  技术社区  ›  rasx

2007年冬季的tempdataextensions——在MVC2中仍然需要?

  •  0
  • rasx  · 技术社区  · 14 年前

    这个 extremely cool article 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();
      }
    }
    

    我在mvcontrib源或mvc2源中没有看到类似的代码。这让我觉得我现在仍然可以使用这个模式,而不用担心当前MVC2版本中已经存在的等效功能(可能在MVC3预览版1中?).

    我什么也没看到 更新 编辑文章。这个2007年的MVC代码经受住了时间的考验吗?现在还准备好了吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   John Farrell    14 年前

    是的,这将有效,并且此功能不会被替换。

    一个警告。在MVC 1中,温度数据仅用于一个请求。有了MVC 2,tempdata会一直保留,直到您访问或手动清除它。如果重定向失败或从不读取tempdata,这可能会使事情复杂化。

    新的dynamic关键字也将提供类似的功能,也许新的c 4.0 dynamic类型可以清理一些东西。