Как я могу вернуть список / массив / Json объект идентификаторов из контроллера в ViewBag и добавить его в htmlAttributes actionlink? - PullRequest
1 голос
/ 25 августа 2011

У меня есть действие, которое возвращает частичное представление, и я хотел бы сохранить список идентификаторов в ViewBag.property = ids (где-то временно) и добавить их в actionLink в object HtmlAttributes

Howэто можно сделать, или есть лучший способ сделать это?

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

В частичном виде

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

Возможно ли это, или есть лучшая альтернатива?Можно ли это сделать, передав объект Json объекту htmlAttributes в actionLink?

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

1 Ответ

1 голос
/ 25 августа 2011

Я бы использовал сеанс (HttpContext.Current.Session) для хранения такой переменной, как эта, вместо viewbag. Таким образом, вы не присоединяете массив к ссылке, а только сессионный ключ.

В коде:

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 более читабельной.

...