2015-01-30 2 views
0

Я тестировал следующие коды много раз. Он работает хорошо, и я получаю результат «return photoMenu_sb.ToString();» как только я удалю строковый аргумент photoFileName. Но когда я объявляю и пытаюсь передать строку photoFileName, ничего не происходит. Зачем?Передача строкового аргумента функции javascript

Я думаю, что проблема заключается в объявлении и передаче строкового photoFileName функции javascript, но я не могу идентифицировать проблему, так как я не получаю никаких ошибок. Есть ли какие-то недостающие цитаты?

[WebMethod] 
public static string LoadPhotosPopup(int offset, int fetch, string IDuserInput) 
{ 
     StringBuilder photosPopup_sb = new StringBuilder();   
     var photosPopup_query = db.Query("SELECT IDphoto], [photoFileName] FROM [photos] WHERE ([IDuser] = @0 AND [photoPublished] = 'True') ORDER BY [photoDate] DESC OFFSET @1 ROWS FETCH NEXT @2 ROWS ONLY", IDuserInput, offset, fetch); 
     foreach (var item in photosPopup_query) 
     { 
      var IDphoto = item.IDphoto; 
      var photoFileName = item.photoFileName; 
      photosPopup_sb.Append("<img src=\"Images/Design/openmenu.png\" onclick=\"photoMenu(" + IDphoto + ", '" + photoFileName + "') \" />");       
     }   
     return photosPopup_sb.ToString(); 
    } 

JavaScript

function photoMenu(IDphoto, photoFileName) { 
$.ajax({ 
    type: "POST", 
    url: "UserControls/photosFunctions.aspx/photoMenu", 
    data: "{ IDphoto: " + IDphoto + "}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     $("#CommentsMenu" + IDphoto).html(data.d); 
    } 
}) 

}

[WebMethod] 
      { StringBuilder photoMenu_sb = new StringBuilder();       
     photoMenu_sb.Append("<label>Testing </label>"); 
     return photoMenu_sb.ToString(); 
    } 

UPDATE Поскольку публичной статической строки photoMenu (интермедиат IDphoto, строка photoFileName) ожидает 2 аргументы затем

data: "{ IDphoto: " + IDphoto + "}", in the javascript function should be 
data: "{ IDphoto: " + IDphoto + ", photoFileName: '" + photoFileName + "'}", 
+0

Что 'тип item.IDphoto'? – chridam

+0

item.IDphoto is int – Gloria

+0

В вашей функции javascript 'photoMenu (IDphoto, photoFileName)' Я не вижу, где используется 'photoFileName'? – chridam

ответ

0

Я думаю, что вам не хватает скобку «)»:

photosPopup_sb.Append("<img src=\"Images/Design/openmenu.png\" onclick=\"photoMenu(" + IDphoto + ", '" + photoFileName + "')\" />"); 
+0

В моем исходном коде есть парастель. Должно быть, я удалил его по ошибке, набрав здесь коды. Я отредактировал свой вопрос. – Gloria

1

Попробуйте создать строковую переменную, которая держит яваскрипта функцию строку:

var img = String.Format("<img src='Images/Design/openmenu.png' onclick='photoMenu({0},'{1}')' />", item.IDphoto, item.photoFileName); 
photosPopup_sb.Append(img); 

В вашем JavaScript, вам необходимо также установить JSON свойство данных для параметра photofileName:

function photoMenu(IDphoto, photoFileName) { 
    $.ajax({ 
     type: "POST", 
     url: "UserControls/photosFunctions.aspx/photoMenu", 
     data: "{ IDphoto: " + IDphoto + ", photoFileName: '" + photoFileName + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      $("#CommentsMenu" + IDphoto).html(data.d); 
     } 
    }); 
} 
+0

Извините, но это не помогло .... все еще ничего нет – Gloria

+0

Попробуйте одинарные кавычки в месте сбежавших двойных кавычек - отредактировав мой ответ, чтобы отразить это – chridam

+0

Все еще ничего ..... Однако, когда я удаляю photoFileName и останавливаю передачу это для функции JavaScript, тогда код работает хорошо. var img = String.Format ("", item.IDphoto); – Gloria

0

Я не вижу пример стоимости вашего photoFileName, но если он имеет обратную косую черту, вы woul d, вероятно, необходимо убедиться, что строка экранирована правильно.

Например:

//causes errors 
called(1, 'file\path\img.png'); 

//successful 
called(1, 'file/path/img.png'); 
Смежные вопросы