在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;
}
]
});