在asp.net mvc应用程序中从Javascript访问C#变量

在asp.net mvc应用程序中从Javascript访问C#变量,c#,javascript,.net,asp.net-mvc,razor,C#,Javascript,.net,Asp.net Mvc,Razor,我在如何在C#中使用javascript变量方面遇到了一个问题,反之亦然:我将此模型传递到视图: public List<Tache> Get_List_Tache() { Equipe _equipe = new Equipe(); List<Tache> liste_initiale = _equipe.Get_List_tache(); return liste_initiale; } 数组events的值仅用于测试,我需要用模型的值填充e

我在
如何在C#中使用javascript变量方面遇到了一个问题,反之亦然
:我将此
模型
传递到视图:

public List<Tache> Get_List_Tache()
{
    Equipe _equipe = new Equipe();
    List<Tache> liste_initiale = _equipe.Get_List_tache();
    return liste_initiale;
}
数组
events
的值仅用于测试,我需要用
模型的值填充
events
。对于这样的每个元素:
title=Tache\u description
start=Begin\u date
end=end\u date


那么我如何才能完成这项任务呢?有什么建议吗?

1:如果您的模型需要
链接的列表,那么您就有了可以操作的完整列表

2:您可以使用jquery ajax作为json数据来获取数据,方法是调用您的操作
get\u List\u tach()

试试这个

foreach (var item in YourList)
{
    events: [{ title: '@item.title', start: '@item.start', end: '@item.end'}]
}

因此,在这段代码中,只需替换模型实体的名称。

假设此javascript内嵌在页面中,您可以执行以下操作:

@model IList<Tache>
<script type="text/javascript">
    var events = @Html.Raw(Json.Encode(Model.Select(x => new { title = x.Description, start = x.Begin.ToString("o"), end = x.End.ToString("o") })));

    $('#calendar').fullCalendar({
        theme: true,
        header: { 
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        editable: true,
        events: events
    });
</script>

如果这个脚本在一个单独的javascript文件中,您仍然可以在视图中设置一个全局
events
变量,稍后脚本将使用该变量。或者,您可以使用AJAX调用获取此模型。

对于title,您可以执行title=“@Tache\u description”

不确定开始日期和结束日期的格式/类型,您可能需要一些函数将日期读入javascript格式。不应该那么难

循环遍历每个元素并将元素添加到事件数组中。有点像

events = new Array()
@foreach(tache in list){
    item = { blah : blah, blah : blah };
    events.push(item);
}

对于此c#列表中的每个c#项,编写以下几行javascript。您可能会得到一个很长的javascript代码块,但它应该可以做到这一点。上面是伪代码

在javascript中创建foreach razor循环:

var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
    theme: true,
    header: {left: 'prev,next today',center: 'title',right: 'month,agendaWeek,agendaDay'},
    editable: true,
    events: [
    @
    {
      bool isFirst = true;
    }
    @foreach(var m in Model)
    {
        if(!isFirst)
        {
          @:,
        }

        @:{title: @m.Tache_description, ...<other properties here>}

        isFirst = false;
    }
    ]
});
var-date=新日期();
var d=date.getDate();
var m=date.getMonth();
var y=date.getFullYear();
$(“#日历”).fullCalendar({
主题:真的,
标题:{左:“上一个,下一个今天”,中:“标题”,右:“月,agendaWeek,agendaDay'},
是的,
活动:[
@
{
bool isFirst=true;
}
@foreach(模型中的var m)
{
如果(!isFirst)
{
@:,
}
@:{title:@m.Tache_description,…}
isFirst=false;
}
]
});

要添加到Darin的答案中:如果您需要外部JavaScript文件中的服务器端变量,请查看这篇博文:

您是否可以返回JSON结果,或者以这种方式调用数据?但是模型是一个链接列表(描述、开始、结束)我这里有一个问题
(x=>新建){
:它不接受lambda表达式尝试将其放在同一行上。我已更新了我的答案。还要确保在lambda表达式中的Tach模型上使用了正确的属性名称。顺便说一句,如果Visual Studio在该表达式下面加上红色波浪线作为错误,则可以忽略它。Visual Studio Intellisense不是intelligent够了。运行应用程序,看看它是否有效。出现的错误与此相同:
CS1977:无法使用lambda表达式作为动态分发的free by first cast to delegate类型或某种表达式树操作的参数
除非您的代码与我在回答中显示的代码不同,否则此操作应该有效。您的view强类型为
@model IList
。我希望您没有尝试使用某些ViewBag内容。此错误的原因是什么
CS1977:无法使用lambda表达式作为动态分发的free by first cast to delegate类型或某种表达式树操作的参数
?但它表明
逗号
@:{title:@m.Tache_description,start:@m.Begin_date,end:@m.Begin_date}
是的,你需要检查项目是否是第一个,如果不是第一个在“{”之前添加一个逗号,对不起,我不明白顺序是什么?查看更新的答案,它有一个用于检查的示例代码,你能发布生成的javascript吗?
events = new Array()
@foreach(tache in list){
    item = { blah : blah, blah : blah };
    events.push(item);
}
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
    theme: true,
    header: {left: 'prev,next today',center: 'title',right: 'month,agendaWeek,agendaDay'},
    editable: true,
    events: [
    @
    {
      bool isFirst = true;
    }
    @foreach(var m in Model)
    {
        if(!isFirst)
        {
          @:,
        }

        @:{title: @m.Tache_description, ...<other properties here>}

        isFirst = false;
    }
    ]
});