2011-08-25 8 views
1

私は部分的なビューを返すアクションを持っている、と私はViewBag.property = idsにIDのリストを保存したい(どこか一時的な)とobject HtmlAttributesViewBagのコントローラからIDのリスト/配列/ Jsonオブジェクトを返し、アクションリンクのhtmlAttributesに追加するにはどうすればよいですか?

これを行うことができますどのように

、またはあるにActionLinkのにそれらを追加しますこれを行うには良い方法がありますか? partialview

@Html.ActionLink("action", ..., new { idArray = @ViewBag.myProperty }) 

public PartialViewResult MyAction() { 
    // do something and return a partialview 
    List/Array/Dictionary ids; // ? 
    foreach (MyClass c in List<MyClass>) { 
     // Doing something else but need to store the ID somewhere for the ActionLink 
     ids[] =c.Id ? 
     ids.Add(c.Id) = c.Id; ? 
    } 
    ViewBag.myProperty = ? //(e.g. some List or Array to Json?) 
} 

は、このことが可能であり、またはより良い代替手段はありますか?これはJsonオブジェクトをactionLinkのhtmlAttributesに渡すことができますか?

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new  
    System.Web.Script.Serialization.JavaScriptSerializer(); 
string sJSON = oSerializer.Serialize(ids); 
ViewBag.myProperty = sJSON; 

答えて

1

セッション(HttpContext.Current.Session)を使用して、ビューバッグの代わりにこのような変数を格納します。このようにして、リンクにはセッションキーだけをアタッチしません。 pagecodeで

string mylistkey = ?;//choose a meaningful and unique key name
HttpContext.Current.Session.add(mylistkey, list); //your list in your example
ViewBag.myProperty = mylistkey; // just put the key in the viewbag

:コードで

ターゲットページで
@Html.ActionLink("action", ..., new { idSessionKey = @ViewBag.myProperty })

、あなたはから実際の配列を取得するためにキーを使用しますセッション:
string sessionKey = HttpContext.Current.Request.QueryString[idSessionKey];
List<MyClass> mylist=(List<MyClass>)(
HttpContext.Current.Session[sessionKey]);
HttpContext.Current.Session.Remove(sessionKey);

はこれを行うには、他の多くの方法があります、と私はあなたが同様にあなたのJSONのアイデアを動作させることができると思います。これは、あなたのURL行をより読みやすく保つために私の提案になります。

+0

お礼ありがとうございます。それは有効な答えですが、私の唯一の問題は、ビュー/ページにページから離れることができる他の多くのリンクがあることです。セッションからそのキーを削除するリンクを使用しない場合、そのキーはセッションに残されます。リストは潜在的にかなり大きくなる可能性があり、我々は一般的にセッションをいっぱいにしないように試みる。 – lko

+0

ええと、私はこれがうまくいくので答えとしてマークします、それはまさに私が探しているものではありません。誰かがJSON回答を投稿した場合は、その回答を更新します。 – lko