0

セッションオブジェクトで、ストアドプロシージャを実行するためのパラメーターとして必要なすべての値を取得する mvc 3 アプリケーションがあります。

userAction が update の場合は、ストアド プロシージャを実行します。

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); 
} 

セッション["マッピング"]のすべての値を取得するにはどうすればよいですか

4

1 に答える 1

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>();
    }
}

次に、各リストプロパティをループして、必要なアクションを実行できます。

于 2012-04-20T13:24:24.273 に答える