передача arraylist из MVC razor View в javascript
У меня есть список в представлении MVC, и мне нужно передать его в функцию javascript, может ли кто-нибудь мне помочь !!!
Спасибо
Один лайнер:
var data = [@Html.Raw(String.Join(",", Model.MyArray.Select(i => "'" + i + "'")))];
Это сработало для меня! Как новичок, я должен был понять, что он проходит между тегами скрипта, и я мог использовать его, чтобы забрать массив, который я пропустил через ViewBag:
@{int[] graphNumbers = ViewBag.GraphNumbers;}
< script type= "text/javascript">
var graphNumbers = [@Html. Raw (String.Join (",", graphNumbers.Выберите (i => "'" + i +"'")))];
< / script>
Это прекрасно прошло через массив, и мой Chart.js график теперь работает!
Большое спасибо!
Вы можете передавать любые данные из контроллера в представление через viewbag. Просто добавьте файл в viewbag и передайте ему закодированный в json список. В представлении используйте тег script в верхней его части, чтобы присвоить его значение переменной javascript. Вот оно у вас :)
Спасибо за ответ, чтобы добавить к вопросу, я не должен использовать Viewbag или Tempdata, и более того, это не список массивов, это "ToList & lt;componentobservationtype>"
как мне получить эту коллекцию listcollection в функцию javascript
Это не решение, это комментарий к моему ответу. Пожалуйста, используйте соответствующие инструменты.
Но:
1) Почему вы не можете использовать viewbag или tempdata?
2) в JavaScript нет такой вещи, как список Есть только массивы и объекты - таким образом, ваш список будет массивом или объектом в javascript, но это безразлично в вашем случае
3) Вы либо визуализируете свою страницу с данными в ней, как я предлагал ранее, либо используете ajax для получения их с сервера во время выполнения. В более позднем случае вы не будете использовать viewbag или tempdata, но hat-это другой сценарий. Это то, что тебя интересует? В таком случае ответ мистера Приянка-это ваш путь.
cshtml:
var listData = JSON.parse('@Html.Raw(HttpUtility.HtmlDecode(ViewBag.ListData))');
ViewBag.ListData= JsonConvert.SerializeObject(new List<string>() { "ABC", "EFG" });
в Java Script напишите это
function GetList() { var siteRoute= $("#hdsiteroute").val() ;// in cshtml or aspx have a hidden field with this id and value as Url.Content("~") this will help in live mode var url=siteRoute+"YourController/GetList" $.ajax({ url: url, data: {yourargument:1}, type: "GET", dataType: "json", async: false, cache: false, error: ajaxError, success: function (result) { for (var i = 0; i < result.length; i++) { alert(result[0]); // access each item like this. if list is of any complex type the use result[0].Name // say name is a proprty of the complex type } } }); } function ajaxError(jqXHR, textStatus, errorThrown) { // CATCH ERROR HERE }
public ActionResult GetList(int yourargument) { List<int> MyList = new List<int>(); //LIST CAN BE OF ANY COMPLEX DATATYPE MyList.Add(1); return Json(MyList, JsonRequestBehavior.AllowGet); }