【问题标题】:How to convert list<string> to javascript array?如何将 list<string> 转换为 javascript 数组?
【发布时间】:2015-11-06 18:14:45
【问题描述】:

大家晚上好,

我知道这个问题很老,但我无法用其他问题解决它,例如:How do I convert a C# List<string[]> to a Javascript array?。我对此很陌生。

我想在我的 javascript 中使用该数组,以显示日期为事件的日期选择器。我的脚本(datepicker.js):

$(document).ready(function() {
    var array = []; //array that should be filled with dates like this ["29-09-2015", "..."]
    $("#datepicker").datepicker({
        numberOfMonths: 3,
        beforeShowDay: function (date) {
            if ($.inArray($.datepicker.formatDate('yy-mm-dd', date), array) > -1) {
                return [false, "", " no"];
            }
            else {
                return [true, "", "yes"];
            }
        }
    });
});

我的控制器如下所示:

public ActionResult Index(int EID = 0, int CID = 0, int IID= 0)
{
   var dates = db.Histories.Where(p => p.SiteId == EID && p.CId == CID && p.IId == IID).Select(p => SqlFunctions.StringConvert((double)
            SqlFunctions.DatePart("m", p.Date)).Trim() + "-" +
            SqlFunctions.DateName("dd", p.Date) + "-" +
            SqlFunctions.DateName("yyyy", p.Date));
    dates = dates.OrderBy(u => u.Length);

    int datescount = dates.Count();
    List<string> sList = new List<string>();
    for(int i =0; i<datescount; i++)
    {
        sList.Add(dates.Skip(i).First());
    }

    return View();
}

在控制器中,列表 sList 包含我想显示为事件的日期。

在视图中,我已经看到的日期选择器将被这样调用:

Date: <div id="datepicker"></div>

所以现在我想将列表发送到脚本并将其转换为数组。 你能解释一下怎么做吗?

在另一页上,我不明白 Romoku 的意思:

//View.cshtml
  <script type="text/javascript">
var arrayOfArrays = JSON.parse('@Html.Raw(Model.Addresses)');

如果我使用 json,我是否必须将列表传输到模型?身份证有什么用?怎么转成json方法?

【问题讨论】:

  • 您可以将整个 C# 循环替换为 .ToList()
  • 否,然后他显示错误错误:无法将方法组“ToList”转换为非委托类型“System.Linq.IQueryable”。您是否打算调用该方法?该列表完成了这项工作。
  • 没有。 阅读错误信息。您需要调用该函数。
  • 谢谢,这样会更快,但这不是真正的问题...
  • 您需要将列表序列化为 JSON,然后将该 JSON 作为 Javascript 文字发出。

标签: javascript arrays json asp.net-mvc-4 datepicker


【解决方案1】:

JSON 有效的 Javascript。您只需要将序列化的 JSON 作为普通的 Javascript 表达式发出:

var arrayOfArrays = @Html.Raw(your JSON);

【讨论】:

    【解决方案2】:

    在您的控制器中,将列表作为模型返回给您的视图

    {
        /// code ..
        return View(sList);
    }
    

    你的视图试试这个

    @model List<string>
    
    @{
       string jsonObject = Newtonsoft.Json.JsonConvert.SerializeObject(Model);
    }
    
    <script type="text/javascript">
    var array = @Html.Raw(jsonObject)
    $(document).ready(function() {
        $("#datepicker").datepicker({
            numberOfMonths: 3,
            beforeShowDay: function (date) {
                if ($.inArray($.datepicker.formatDate('yy-mm-dd', date), array) > -1) {
                    return [false, "", " no"];
                }
                else {
                    return [true, "", "yes"];
                }
            }
        });
    });
    </script>
    

    【讨论】:

    • 谢谢。但是,如果我在脚本中设置断点,他不会访问 .datepicker,并在“var array = @Html.Raw(jsonObject);”处显示警告那 ”;”是一个语法错误。而且它不会顺利......到目前为止,jsonObject中应该存在的字符串。
    • 如果你把 var array = @Html.Raw(jsonObject) 放在 $(document).ready 之外会怎么样...检查我的编辑
    • 它是一样的。我已经在这里遇到了类似的问题:stackoverflow.com/questions/31641641/…(此时:更新(它正在工作!!!))。在那里我必须插入正确的网址而不是剃须刀助手。我通过互联网搜索但没有找到任何东西......你知道如何找到替代品吗?难道是因为这个?
    • 那么在这种情况下,您的 javascript 代码位于单独的 JS 文件中,而 razor 语法仅适用于 .cshtml 文件。现在有点奇怪,我发布的代码不起作用,因为我经常以这种方式插入对象,你能告诉我它呈现为查看源代码的“数组”变量是什么吗?
    • 我无法访问数组,只能访问 jsonObject。如果我在那里设置一个断点,它是一个映射断点,并且在我运行程序时永远不会使用它。
    猜你喜欢
    • 2013-08-30
    • 2017-12-25
    • 1970-01-01
    • 2013-08-26
    • 2019-02-27
    • 2020-01-11
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多