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

时间:2015-02-20 04:15:58

标签: javascript c# jquery html asp.net-mvc

这是我的日历代码:

@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)标有红色,所以我不知道我需要更改或修复什么。
三江源。

2 个答案:

答案 0 :(得分:2)

在这种情况下,

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

答案 1 :(得分:0)

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

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

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