需要使用mvc3中的foreach从Session对象中检索值吗?

时间:2012-04-20 13:14:58

标签: asp.net-mvc asp.net-mvc-2

我有mvc 3应用程序,其中在会话对象中我将所需的所有值作为参数来执行存储过程。

如果userAction更新,则执行存储过程。

public ActionResult Index(string userAction) 
{ 
   if(Session["Mappings"] != null)            
        ViewData["Message"] = "Mapping web grid"; 

    if (Session["PricingSecurities"] == null) 
        Session["PricingSecurities"] = objRepository.GetPricingSecurityID(); 
    if (Session["Cusips"] == null) 
        Session["Cusips"] = objRepository.GetCUSIP(); 

    SecurityMappingModel objModel = null; 
    mappings = (List<SecurityMappingModel>)Session["Mappings"]; 

    objModel = new SecurityMappingModel(); 


    if (userAction == "Update" ) 
    { 
        //help me to fix this code 

        //foreach (var item in Session)
        //{Session["Mappings"] //NEED FIX HERE
        //}
        // PLEASE HELP ME TO RETRIEVE SESSION VALUES
        return RedirectToAction("Index"); 
    } 
    return View(objModel); 
} 

我如何检索会话的所有值[&#34;映射&#34;]它持有3个条目3ids,3cusips,3计算

1 个答案:

答案 0 :(得分:1)

简短的回答是不要使用var作为枚举类型,而是使用object

foreach (obj item in Session) {
    if (item is CUSIP) {
        // CUSIP processing
    } else if (item is PricingSecurity) {
        //Pricing security processing
    } //etc.
}

正如您所看到的,此方法的问题在于您必须测试每个对象的类型,以便对其执行任何自定义操作。更好的想法是创建自己的类来存储在会话中:

public class SessionData()
{
    List<CUSIP> Cusips {get;set;}
    List<PricingSecurity> PricingSecurities {get;set;}

    public SessionData()
    {
        // Initialize the lists so they are never null
        this.Cusips = new List<CUSIP>();
        this.PricingSecurities = new List<PricingSecurity>();
    }
}

然后,您可以遍历每个列表属性并执行您需要的任何操作。