繁体   English   中英

将razor语法与javascript混合

[英]Mixing razor syntax with javascript

在我的主控制器的索引视图页面上,我想在Google地图上显示从数据库中提取的数据。 因此,我要做的是将model.cs文件包含在homecontroller.cs文件中,并将整个数据库数据传递给视图,方法是将其转换为列表并作为Viewbag对象传递。 但是现在,当我尝试根据数据库数据在地图上显示标记时 ,它不会显示。 即使是简单的javascript alert()语句也不会在屏幕上显示任何内容。 以下是代码:-

----------------- EventsRegister.cs(“模型”页面)------------

namespace CampusConnect.Models
{
    public class EventReg
    {
        public int ID { get; set; }
        public string UniqueId { get; set; }
        public float Latitude { get; set; }
        public float Longitude { get; set; }
        public string Description { get; set; }
    }

    public class EventDBContext: DbContext
    {
        public DbSet<EventReg> Events { get; set; }
    }
}

----------------- Homecontroller.cs -----------------------

namespace CampusConnect.Controllers
{


    public class HomeController : Controller
    {


        private EventDBContext db = new EventDBContext();
        private List<EventReg> list;

        public ActionResult Index()
        {
            list = db.Events.ToList();
            ViewBag.Message = "Please Register/Login to continue";
            ViewBag.EntireList= list;
            return View();
        }
    }
}

---------------- Index.cshtml(Homecontroller的索引视图)----------------

@section bodyOrMap {
@if (Request.IsAuthenticated)
{
    <text>
        <div class="content-wrapper">

            @*Google Maps included*@

            <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
                <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyC7TFDjCbI4A10H2J-f6zBFHToFQIs6Z2M&sensor=true"></script>
                <script type="text/javascript">

                    function InitializeMap() {
                        var geocoder = new google.maps.Geocoder();
                        var latlng = new google.maps.LatLng(29.8644, 77.8964);
                        var myOptions = {
                            disableDoubleClickZoom: true,
                            zoom: 17,
                            center: latlng,
                            mapTypeId: google.maps.MapTypeId.ROADMAP
                        };
                        var map = new google.maps.Map(document.getElementById("map"), myOptions);
                        @foreach (var item in ViewBag.EntireList)
                        {
                        <text>
                        alert(@item.Description);  -------->THIS DOESN'T PRINT
                        </text>
                         }


                        var aListener = google.maps.event.addListener(map, 'dblclick', function (event) {
                            alert("Double click displays values" + event.latLng.lat() + " " + event.latLng.lng());

                        });
                    } //Initialise map function ends
                    window.onload = InitializeMap;

                </script>

                <div id="map" style="top: 0px; left: 0px; /*width: 500px;*/ height: 338px; position: relative; float: left; display: inline; width:49%">

                </div>

            </asp:Content>

        </div>
    </text>
}
else
{
    //some HTML
}
}

地图被显示,但警报语句不打印。 此外, 双击事件处理程序不起作用(尽管在数据库中没有数据时它才起作用)。 我已经检查了数据库,并在表Events.mdf中输入了一行数据。

有人可以告诉我问题是什么吗? 我是asp.net编程的新手,所以这可能只是个小问题。 谢谢。

item.Description可能实际上没有存储有效的JavaScript字符串,或者如果存在,则表示其编码不正确。 例如,如果item.Discription的值为"Hello World!" 然后这个的渲染输出

alert(@item.Description);

会是这样的:

alert(Hello World!);

这显然不是有效的javascript。

尝试这样的事情:

alert(@Html.Raw(Json.Encode(item.Description)));

另外,如果您按以下方式打印警报,则无需在警报周围放置<text> (这也是无效的JavaScript):

@foreach (var item in ViewBag.EntireList)
{
    @:alert(@Html.Raw(Json.Encode(item.Description)));
}

虽然, <text>可能只是其他内容的占位符文本。

您正在使用Razor输出一个字符串,该字符串在最终JavaScript的上下文中变为文字字符串。 JavaScript需要在文字字符串两边加上引号。

尝试这个:

alert("@item.Description");

例如,如果item.Description包含值San Francisco,那么最终的JavaScript输出最终为:

alert("San Francisco");

没有引号,您将拥有:

alert(San Francisco);

JavaScript将尝试弄清楚SanFrancisco是JavaScript标识符的意思。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM