Как я могу вернуть список / массив /Json объект идентификаторов из контроллера в ViewBag и добавить его в htmlAttributes actionlink?
У меня есть действие, которое возвращает частичное представление, и я хотел бы сохранить список идентификаторов в ViewBag.property = ids
(где-то временно) и добавьте их в actionLink в object HtmlAttributes
Как это можно сделать, или есть лучший способ сделать это?
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 ответ
Я бы использовал сеанс (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 более читабельной.