2010-05-25 3 views
3

У меня есть некоторые данные JQuery AJAX POSTing для моего backend C# WebForm. Это POSTs к статическому методу WebForm строки, который возвращает значение, JQuery использует это значение для изменения URL-адреса изображения в html. Все в порядке и денди.JQuery + AJAX + ASP.Net + WebForms

Однако я хотел бы расширить функциональность существующего кода (хотя я не закрываю его для полного переписывания), чтобы позволить мне манипулировать элементами управления ASP на передней панели с C# -комментариями, которые я не могу сделать из-за упомянутого статического строкового метода, действующего как мой WebForm.

Есть ли у кого-нибудь идеи, чтобы помочь моему затруднительному положению?

Backend

[System.Web.Services.WebMethod] 
    public static string ImageLoad(string address) 
    { 
     //if fail 
     return "/Unavailable.bmp"; 

     //if succeed 
     return "myimage.jpg"; 
     //third option 
     else 
     return "myotherimage.jpg"; 
    } 

JQuery/AJAX

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
      type: "POST", 
      url: "myPage.aspx/ImageLoad", 
      data: "{'address':'" + address.toString() + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "text", 
      success: function (output) { 
       $('#imgImage').attr('src', output); 
      } 
     }); 
    } 
}); 

ответ

0

С помощью коллеги я разработал другое решение. Структура содержит выходные данные, которые я желаю, затем переносится в строковый массив, а затем возвращается через веб-метод статической строки. После возвращения в JQuery данные будут перенесены туда, где ему нужно идти разными индексами массива.

Передняя

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
     type: "POST", 
     url: "MyForm.aspx/MyMethod", 
     data: "{'address':'" + address.toString() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "JSON", 

     success: function (output) { 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 0); 
      }) 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 1); 
      }) 
      $.each(output, function (index, value) { 
       place value in form 
       return (index != 2); 
      }) 
      $.each(output, function (index, value) { 
       $('#imgImage').attr('src', this); 
       return (index != 3); 
      }) 
     } 

Назад конец

public struct TestStruct 
    { 
     public string value1; 
     public string value2; 
     public string value3; 
     public string value4; 

     public TestStruct(string value1, string value2, string value3, string value4) 
     { 
      this.value1 = value1; 
      this.value2 = value2; 
      this.value3 = value3; 
      this.value4 = value4; 
     } 
    } 

    [System.Web.Services.WebMethod] 
    public static string[] MyMethod(string address) 
    { 
     string[] returnarray = new string[4]; 
     TestStruct struct; 
     struct.value1 = ""; 
     struct.value2 = address; 
     struct.value3 = ""; 
     struct.value4 = "/Unavailable.bmp"; 

     //if fail, return default values 
       returnstring.SetValue(struct.value1, 0); 
       returnstring.SetValue(struct.value2, 1); 
       returnstring.SetValue(struct.value3, 2); 
       returnstring.SetValue(struct.value4, 3); 
       return returnstring; 

     //if succeed 
       struct.values = processed values; 
       set the values on returnstring 
       return returnstring; 
     //else 
       struct.values = other processed values; 
       set the values on returnstring 
       return returnstring; 
    } 

Теперь только вопросы, у меня есть получение Jquery, чтобы правильно отображать данные клиенту.

+0

, который я получил, заменив все мои теги «.this» тегами «.value». – Kevin

2

постбэк какой-то требуется обработать серверные элементы управления.

Панели обновления - ваш единственный реальный выбор для работы с элементами управления asp.net в этом сценарии.

Но я бы предложил найти другой подход - панели обновления являются злыми и дадут вам бородавки. плохой вид.

+0

@joo - не скоро. но я никогда не буду свободен - codeplex - это одна большая панель обновления, и у меня есть несколько проектов. будет пользователем/жертвой панелей обновления для неопределенного будущего. ; - \ –

4

Использовать WebService. Это позволит вам вызвать службу с помощью jQuery в любом месте вашего сайта.

function scriptImageLoad() { 
    var address = $("#txtAddress").val(); 
     $.ajax({ 
      type: "POST", 
      url: "MyService.asmx/ImageLoad", 
      data: "{'address':'" + address.toString() + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "text", 
      success: function (output) { 
       $('#imgImage').attr('src', output); 
      } 
     }); 
    } 
}); 

[WebService, ScriptService] 
public class MyService : WebService 
{ 
    [ScriptMethod] 
    public static string ImageLoad(string address) 
    { 
     //if fail 
     return "/Unavailable.bmp"; 

     //if succeed 
     return "myimage.jpg"; 
     //third option 
     else 
     return "myotherimage.jpg"; 
    } 
} 
+0

Мне посоветовал коллега, чтобы держаться подальше от WebServices, они не совсем соответствуют моей потребности. – Kevin

+0

Почему они советовали вам держаться подальше от WebServices? – jrummell

+0

Цель/цель моего веб-приложения не будет пользоваться использованием веб-сервиса. Я все равно сталкиваюсь с теми же проблемами, что и я. Однако я разработал новое решение проблемы. В настоящее время я использую структуру для размещения своих результатов и затем возвращаю эти выходные данные в массив строк. – Kevin