Как Включить код C# правильно в Блоке JavaScript, содержавшем в Странице C#.net?

Я в основном сливаю две особенности своего веб-приложения карты Google. но мне нужны координаты, которые доступны бэкендом, таким образом, я сделал Таблицу данных , и это тогда передается JavaScript.

Но поскольку я сливал код, я сталкиваюсь с некоторой проблемой синтаксиса (скорее всего).

Update: Error that I get is Operator '+' cannot be applied to operands of type 'string' and 'method group'

Update #2 : See below for the Page_Load code (creation of the data table & main code execution if fired from that code)

Update #3: Added Main Page's code. Error now I am getting: Microsoft JScript runtime error: The value of the property 'initialize' is null or undefined, not a Function object

At Line var myLatLng = new google.maps.LatLng(" tblPoints.Rows[i][0].ToString @", " + tblPoints.Rows[i][1].ToString + @"); I am getting some strange error related to openeing/closing of @" & ";

Любой ответ/предложение заметен.. Спасибо..

Кодекс для Главной Страницы (где JS func называют):

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE HTML>



    <title>maps integ</title>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
        <div id="map_canvas" style="width: 100%; height: 100%;"></div>
        <script type="text/javascript">
            window.onload = function (e) {
                initialize();
            }
        </script>
    </form>
</body>
</html>

Кодекс для Page_Load на Главной Странице:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("Latitude"));
            dt.Columns.Add(new DataColumn("Longitude"));
            dt.Columns.Add(new DataColumn("Info"));

            DataRow row = dt.NewRow();
            row["Latitude"] = 28.483109;
            row["Longitude"] = 77.107756;
            row["Info"] = "INFO #1";
            dt.Rows.Add(row);

            row = dt.NewRow();
            row["Latitude"] = 28.483243;
            row["Longitude"] = 77.107624;
            row["Info"] = "INFO #1";
            dt.Rows.Add(row);

            row = dt.NewRow();
            row["Latitude"] = 28.483293;
            row["Longitude"] = 77.107579;
            row["Info"] = "INFO #1";
            dt.Rows.Add(row);

            row = dt.NewRow();
            row["Latitude"] = 28.483359;
            row["Longitude"] = 77.107536;
            row["Info"] = "INFO #1";
            dt.Rows.Add(row);

            row = dt.NewRow();
            row["Latitude"] = 28.483559;
            row["Longitude"] = 77.107273;
            row["Info"] = "INFO #1";
            dt.Rows.Add(row);

            //row = dt.NewRow();
            //row["Latitude"] = 28.4804;
            //row["Longitude"] = 77.1251;
            //dt.Rows.Add(row);

            js.Text = GPSLib.PlotGPSPoints(dt);
        }
    }

Кодекс для файла класса:

public static class GPSLib
{
    public static String PlotGPSPoints(DataTable tblPoints)
    {
        try
        {
            String Locations = "";
            String sJScript = "";
            int i = 0;


            foreach (DataRow r in tblPoints.Rows)
            {
               //bypass empty rows 
                if (r["latitude"].ToString().Trim().Length == 0)
                    continue;

                string Latitude = r["latitude"].ToString();
                string Longitude = r["longitude"].ToString();

               //create a line of JavaScript for marker on map for this record 
                Locations += Environment.NewLine + @"
                path.push(new google.maps.LatLng(" + Latitude + ", " + Longitude + @"));

                var marker" + i.ToString() + @" = new google.maps.Marker({
                    position: new google.maps.LatLng(" + Latitude + ", " + Longitude + @"),
                    title: '#' + path.getLength(),
                    map: map
                });";

                i++;

            }

           //construct the final script
           //var cmloc = new google.maps.LatLng(33.779005, -118.178985);

           //map.panTo(curmarker.position); //zooming on current marker's posn.
           //map.panTo(myOptions.getPosition());
            sJScript = @"<script type='text/javascript'>

            var poly;
            var map;

            function initialize() {
                var cmloc = new google.maps.LatLng(28.483243, 77.107624);
                var myOptions = {
                    zoom: 19,
                    center: cmloc,
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };

                map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);


                var polyOptions = {
                    strokeColor: 'blue',
                    strokeOpacity: 0.5,
                    strokeWeight: 3
                }
                poly = new google.maps.Polyline(polyOptions);
                poly.setMap(map);

                var path = poly.getPath();

               " + Locations + @"

                    }

            final initPoints(){
        // var map;
            var infowindow;

            var mapOptions = {
                zoom: 19,
                mapTypeId: google.maps.MapTypeId.ROADMAP,
                center: centr
             };

            map = new google.maps.Map(document.getElementById('map_canvas'),
            mapOptions);
            infowindow = new google.maps.InfoWindow();
            drop();


            }

        function drop() {
            for (var i = 0; i < "+ tblPoints.Rows.Count + @"; i++) {
        var myLatLng = new google.maps.LatLng("+ tblPoints.Rows[i][0].ToString+ @", "+ tblPoints.Rows[i][1].ToString + @");
        var mark = new google.maps.Marker({
            position: myLatLng,
            map: map,
        });
    iWindow(mark, "+ tblPoints.Rows[i][2].ToString [email protected]");
   }
}

function iWindow(marker, title) {
    google.maps.event.addListener(marker, 'click', function() {

        infowindow.setContent(title);
        infowindow.open(map, marker);
    });
}
                </script>";
            return sJScript;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}
0
nl ja de

2 ответы

Почему вы не используете Последовательность. Формат вместо этих связей. Это выглядит лучше, это легче поддержать и по всей вероятности решит вашу проблему?

Update 1: Are you sure the following code wouldn't do the job?

Update 2: The drop function is now created in the beginning

Update 3: OK here is my next update :)

Я предложил бы вам, чтобы использовать это. Страница. ClientScript. RegisterStartupScript вместо опечатки для добавления сценария к странице. Я сделал некоторые меры также в GPSLib. Таким образом, вот Page_Load ()

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("Latitude"));
        dt.Columns.Add(new DataColumn("Longitude"));
        dt.Columns.Add(new DataColumn("Info"));

        DataRow row = dt.NewRow();
        row["Latitude"] = 28.483109;
        row["Longitude"] = 77.107756;
        row["Info"] = "INFO #1";
        dt.Rows.Add(row);

        row = dt.NewRow();
        row["Latitude"] = 28.483243;
        row["Longitude"] = 77.107624;
        row["Info"] = "INFO #1";
        dt.Rows.Add(row);

        row = dt.NewRow();
        row["Latitude"] = 28.483293;
        row["Longitude"] = 77.107579;
        row["Info"] = "INFO #1";
        dt.Rows.Add(row);

        row = dt.NewRow();
        row["Latitude"] = 28.483359;
        row["Longitude"] = 77.107536;
        row["Info"] = "INFO #1";
        dt.Rows.Add(row);

        row = dt.NewRow();
        row["Latitude"] = 28.483559;
        row["Longitude"] = 77.107273;
        row["Info"] = "INFO #1";
        dt.Rows.Add(row);

        //row = dt.NewRow();
        //row["Latitude"] = 28.4804;
        //row["Longitude"] = 77.1251;
        //dt.Rows.Add(row);

        var script = GPSLib.PlotGPSPoints(dt);

        this.Page.ClientScript.RegisterStartupScript(
            this.GetType(),
            "focus",
            script, false);
    }
}

и вот GPSLib

public static class GPSLib
{
    public static String PlotGPSPoints(DataTable tblPoints)
    {
        try
        {
            StringBuilder locations = new StringBuilder();
            StringBuilder drop = new StringBuilder();

            //function drop() {{
           //   for (var i = 0; i < {1}; i++) {{
           //   var myLatLng = new google.maps.LatLng({2}, {3});
           //   var mark = new google.maps.Marker({{
           //       position: myLatLng,
           //       map: map,
           //   }});
           //   iWindow(mark, {4});
           //   }}
            //}}

            drop.AppendFormat(@"function drop() {{{0}", Environment.NewLine);
            int i = 0;
            foreach (DataRow r in tblPoints.Rows)
            {
               //bypass empty rows 
                if (r["latitude"].ToString().Trim().Length == 0)
                    continue;

                string latitude = r["latitude"].ToString();
                string longitude = r["longitude"].ToString();
                string info = r["info"].ToString();

               //create a line of JavaScript for marker on map for this record 
                locations.AppendFormat(@"{0}path.push(new google.maps.LatLng({1}, {2}));

        var marker{3} = new google.maps.Marker({{
            position: new google.maps.LatLng({1}, {2}),
            title: '#' + path.getLength(),
            map: map
        }});", Environment.NewLine, latitude, longitude, i);

                drop.AppendFormat(@"var myLatLng{0} = new google.maps.LatLng({1}, {2});
        var mark{0} = new google.maps.Marker({{
        position: myLatLng{0},
        map: map,
        }});
        iWindow(mark{0}, '{3}');", i, latitude, longitude, info);

                i++;

            }

            drop.Append("}");

           //construct the final script
           //var cmloc = new google.maps.LatLng(33.779005, -118.178985);

           //map.panTo(curmarker.position); //zooming on current marker's posn.
           //map.panTo(myOptions.getPosition());
            string sJScript = string.Format(@"<script type='text/javascript'>

    var poly;
    var map;

    function initialize() {{
        var cmloc = new google.maps.LatLng(28.483243, 77.107624);
        var myOptions = {{
            zoom: 19,
            center: cmloc,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }};

        map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);


        var polyOptions = {{
            strokeColor: 'blue',
            strokeOpacity: 0.5,
            strokeWeight: 3
        }}
        poly = new google.maps.Polyline(polyOptions);
        poly.setMap(map);

        var path = poly.getPath();

        {0}

    }}

    function initPoints(){{
       // var map;
        var infowindow;

        var mapOptions = {{
            zoom: 19,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            center: centr
            }};

        map = new google.maps.Map(document.getElementById('map_canvas'),
        mapOptions);
        infowindow = new google.maps.InfoWindow();
        drop();
    }}

    {1}

    function iWindow(marker, title) {{
        google.maps.event.addListener(marker, 'click', function() {{

            infowindow.setContent(title);
            infowindow.open(map, marker);
        }});
    }}
    </script>", locations, drop);
            return sJScript;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

Вот моя aspx страница:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE HTML>



    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
        <script type="text/javascript">
            window.onload = function (e) {
                initialize();
            }
        </script>
    </form>
</body>
</html>
3
добавлено
Хорошо, вы забыли круглые скобки после tblPoints. Ряды [я] методы [0].ToString
добавлено автор Vasil Trifonov, источник
Я вижу, проблема здесь находится в функции снижения, вы используете tblPoints. Ряды [я] [0] и я установлен в tblPoints. Ряды. Граф в цикле выше
добавлено автор Vasil Trifonov, источник
Я didn' t точно понимают ваш пункт, вы не можете сделать для петли в JavaScript, который изменит меня значение переменной в коде позади, that' s, почему я написал свое второе обновление.
добавлено автор Vasil Trifonov, источник
добавлено автор Vasil Trifonov, источник
Я обновил свой ответ.
добавлено автор Vasil Trifonov, источник
где делают вы звоните, это инициализирует() метод на странице, я добавил это <тип сценария = "текст/JavaScript"> window.onload =, функция (e) {инициализирует ();} внизу страницы и это работало.
добавлено автор Vasil Trifonov, источник
Я на самом деле предпочел бы использовать готовый документ jQuery - $ (документ) .ready (функция() {инициализируют ();});
добавлено автор Vasil Trifonov, источник
Это работает на меня </div> <тип сценария = "текст/JavaScript"> window.onload = функция (e) {инициализируют (); тревога (' initialized');} это - мой aspx
добавлено автор Vasil Trifonov, источник
I' ve добавил мой тест .aspx страница также
добавлено автор Vasil Trifonov, источник
ahh.. Я думаю он wouldn' t. Кодекс имеет C#, который включен между JavaScript, и затем целый блок JavaScript снова включен в страницу C#: |
добавлено автор beerBear, источник
Хорошо.. Я получаю аварийное окно.. ater, на которые должно нажать нажатие на OK I представление совместимости , и затем я получаю ту же самую ошибку ошибка периода выполнения Microsoft JScript: ценность собственности ' initialize' пустое или неопределенный, не Функциональный объект , можно ли загрузить проект где-нибудь? Кроме того, я использую .net структуру 3.5 на Visual Studio 2008.
добавлено автор beerBear, источник
(продолжение следует). в моем теге основного текста. Теперь, когда я пытался бежать, я наконец получил ту же самую ошибку: ( intiliaze() неопределенный.. не функция и т.д.
добавлено автор beerBear, источник
Привет, я просто попытался управлять им, добавив ваш aspx код страницы (только начинающийся с <html> , чтобы </ HTML> оставляет оставление тем же самым.. И ошибка № 1, которую я получил, была: "Google, неопределенный", я предполагаю вследствие того, что вы haven' t добавил это: <тип сценария = "text/ JavaScript" src = "http:/ / карты google.com/ maps/ api/ js? sensor=false"> </ scri‌ ​ pt> в вашем page' s голова признак. Ошибка № 2 после добавления google' s наносят на карту ссылку на сценарии JS, которую я получил, был: , "связанный с некоторой шириной.." я предполагаю that' s из-за неопределенной ширины холста и т.д., таким образом, я должен был добавить это: </ отделение> (продолжение следует).
добавлено автор beerBear, источник
Я понятия не имею, почему это не работает: (Я также пытался поместить <тип сценария = "text/ JavaScript"> window.onload = функция (e) {инициализирует ();} </ сценарий> в конце <тело> признак и в <тело> помечает также (и удаленный вызов метода тела-onload). Но все еще получаю ту же самую ошибку. Какие-либо идеи?
добавлено автор beerBear, источник
Просто добавленный мой Главный page' s кодируют, где JS func. называют. Заметьте <тело onload = "инициализирует ()"> . BTW, на которых у страницы были вы добавленный <тип сценария = "text/ JavaScript"> window.onload = функция (e) {инициализирует ();} </ сценарий> , чтобы заставить его работать?: O
добавлено автор beerBear, источник
Нет.. получение ошибку периода выполнения Microsoft JScript: ценность собственности ' initialize' пустое или неопределенный, не Функциональный объект . Для обоих initPoints() и Инициализируют (): (BTW я сначала думал, чтобы использовать Пэйджа. ClientScript.. , но пропущенный идея, поскольку это было слишком сложно, чтобы объединяться в мой существующий код: |
добавлено автор beerBear, источник
+1 для помощи мне все это через. Но теперь я получаю ошибку периода выполнения Microsoft JScript: ' initialize' не определен , когда я пытался бежать , инициализируют() в теле onload событие также та же самая ошибка, когда я изменился попробованный, чтобы выполнить initPoints() в теле onload событие. Я знаю.. этот код близок.. бежать успешно.
добавлено автор beerBear, источник
@Please видят мой обновленный Главный page' s Кодекс. Кроме того, я использовал tblPoints. Ряды [я] [0] , поскольку я повторяюсь в для , петля и я приносит колонку № 0 ряда № 1 (если i=1) из таблица данных tblPoints.
добавлено автор beerBear, источник
Вытаскивание ошибки индекс из исключения диапазона. Нет никакого ряда в положении 5. Та же самая ошибка в вашем коде, а также в моем. Я подозреваю, что у таблицы данных есть только 5 отчетов (ряды) и таким образом, петля проверяет на индекс 5 т.е. 6-й отчет. (Обновление моего Вопроса с page_load кодирует для касательно),
добавлено автор beerBear, источник
Пожалуйста, мой question' s обновление (добавленное сообщение об ошибке). И это - синтаксис, который производит проблему. Кроме того, как я мог возможно отформатировать код C#, чтобы соответствовать коду JavaScript?
добавлено автор beerBear, источник

Вы забыли некоторых '+', правильная линия

var myLatLng = new google.maps.LatLng(" + tblPoints.Rows[i][0].ToString + @", " +
                   tblPoints.Rows[i][1].ToString + @");

Править:

Вы также забыли () после ToString, исправления:

var myLatLng = new google.maps.LatLng(" + tblPoints.Rows[i][0].ToString() + @", "
                 + tblPoints.Rows[i][1].ToString() + @");
1
добавлено
@codebreaker обновляется для ошибки.
добавлено автор Destrictor, источник
+1 Да, который действительно исправлял ошибку.: | Добрался, ошибка периода выполнения теперь (похож на Vasil, опубликовал обновленный ответ). Благодарен за то, что тонна выручает меня:)
добавлено автор beerBear, источник
@Destrictor.. благодарит изучить его.. Я забыл публиковать свой обновленный код. Однако, ошибка - та же самая линия.. и ошибка messasge находится в моем question' s обновление.: |
добавлено автор beerBear, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

All That JS
All That JS
417 участник(ов)

JS на русском

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)