Jquery datepicker - 从Controller MVC传递日期数组

时间:2016-11-08 13:52:11

标签: jquery json asp.net-mvc datepicker

我创建了一个包含可用日期的List,并将其序列化为json:

List<string> dates = new List<string>();   

foreach(BookingDates itm in model.availableDates)
{
    dates.Add(itm.expDate.ToString("dd-MM-yyyy"));
}

model.datesStr = new JavaScriptSerializer().Serialize(dates); 

然后我将模型数据传递给jquery并尝试将日期传递给datepicker:

var availableDates = @Html.Raw(Json.Encode(@Model.datesStr));
alert(availableDates);

function available(date) {
    dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
    if ($.inArray(dmy, availableDates) != -1) {
        return [true, "ui-available", "Available"];
    } 
    else {
        return [false, "ui-unavailable", "unAvailable"];
    }
}

日期选择器不会填充日期。 但是,如果我输入日期,它会:

var availableDates = ["20-11-2016","17-12-2016"];

我注意到的唯一区别是当上面输入日期时我的警报结果是:

20-11-2016,17-12-2016

当我使用json时,反对导致以下结果:

[&#34; 20-11-2016&#34;&#34; 17-12-2016&#34;]

我也尝试将var声明为数组:

var availableDates = [];
availableDates = @Html.Raw(Json.Encode(@Model.datesStr));

再次没有成功实现json。我应该以某种方式将我的json转换为用逗号分隔的字符串吗?

1 个答案:

答案 0 :(得分:2)

JavaScriptSerializer().Serialize方法会将您的列表转换为字符串。如果您需要一个用于客户端代码的javascript数组,则应该将视图模型属性从字符串更改为集合(数组/列表)。

public class YourViewModel
{
  public List<string> Dates { set;get;}
  //Other properties 
}

在你的行动方法中,

foreach(BookingDates itm in model.availableDates)
{
    vm.Dates.Add(itm.expDate.ToString("dd-MM-yyyy"));
}
return View(vm);

现在在剃须刀视图中,

@model YourViewModel
<script>
   var availableDates = @Html.Raw(Newtonsoft.JsonJsonConvert
                                            .SerializeObject(Model.Dates))
   console.log(availableDates);
</script>