如何在ASP.NET MVC中预览脚本内部标记

How to foreach inside script tag in ASP.NET MVC

本文关键字:脚本 内部 ASP NET MVC      更新时间:2024-02-12

这是我的日历代码:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script>
        $(document).ready(function () {
            $('#calendar').fullCalendar({
                editable: false,
                events: [{
                    @foreach (var item in Model) {
                        title : @Html.DisplayFor(modelItem => item.EventName),
                        start : @Html.DisplayFor(modelItem => item.StartDate),
                        end : @Html.DisplayFor(modelItem => item.EndDate)
                    }
                }]
            });
        });
    </script>
    }

我的foreach内部有一些问题,@Html.DisplayFor(modelItem => item.EventName), @Html.DisplayFor(modelItem => item.StartDate)@Html.DisplayFor(modelItem => item.EndDate)都是红色下划线,所以我不知道该更改或修复什么
谢谢。

@Html.Raw在这种情况下应该适用。

$(document).ready(function () {
        $('#calendar').fullCalendar({
            editable: false,
            events: [{
                @foreach (var item in Model) {
                     @Html.Raw("title :"+item.EventName+",start :"+ item.StartDate+",end :"+ item.EndDate);                         
                }
            }]
        });
    });

由于您可能希望每个数组项都有一个JSON对象,因此需要为每个项发出一对{}大括号。我在下面用外括号加上绳子做了这个。加入以发射内部的。只有当列表中至少有一个项目时,此操作才能正常工作。希望我所有的牙套都匹配。使用Html.Raw时要注意,如果用户指定了"EventName"之类的内容,他们可能会嵌入恶意javascript,因此如果是这样,您应该采取适当的预防措施来清除/编码这些值。

events: 
   [
     @(Html.Raw("{" 
        + string.Join("},{", 
             Model.Select(m=> "title:'"" + m.EventName + "'",start:'"" + item.StartDate + "'",end:'"" + item.EndDate + "'"" ))     
        + "}" )
     )
   ]

使用浏览器检查生成的HTML,看看是否得到了预期的javascript。