2010-01-07 4 views
5

Ich habe einen Web-Service, von dem ich eine Zeichenfolge mit HTML zurückgeben muss. Dieser HTML-Code ist das Markup für ein Select-Steuerelement (zur Verwendung in jqGrid-Suchfiltern), z.zurück html von wcf service

<select><option id='1'> value 1 </option></select> 

Meine WCF Webservice enthält eine Methode, die diesen Wert als String zurückgibt ...

public string GetLeadTypeSelect() 
{ 
    return "<select><option id='1'> value 1 </option></select>"; 
} 

und den Vertrag für diese Methode ist:

[OperationContract] 
[WebInvoke(Method = "GET", 
    BodyStyle = WebMessageBodyStyle.Bare, 
    ResponseFormat = WebMessageFormat.Json)] 
string GetLeadTypeSelect(); 

Mein Problem ist, dass Escapezeichen werden in die Zeichenfolge eingefügt, sodass das zurückgegebene HTML unbrauchbar wird. Der Dienst gibt Folgendes zurück:

"<select><option id='1'> value 1 <\/option><\/select>" 

Die Anführungszeichen und die Escapezeichen '/' in den abschließenden <option> und <select> Tags beide Probleme.

jqGrid verwendet den zurückgegebenen HTML die Drop-down anzuzeigen ...

filterModel: [ 
    { label: 'Type', name: 'type', stype: 'select', surl: '../../../Services/Leads/GetLeads.svc/GetLeadTypeSelect' }, 

Also, meine Frage ist, wie ich reine HTML zurück an den Client von diesem Web-Service zurückkehren, so dass es in eingefügt werden kann meine HTML Seite?

Vielen Dank im Voraus für jede Hilfe, Colin.

Antwort

0

Ich nehme an, Sie verwenden es durch Javascript.

Wenn Sie eine unescape (Antwort) machen, sollte Ihr Problem gelöst werden.

Auf der anderen Seite, wenn Sie es nicht in Javascript, sondern nur in einer ASP.NET/PHP/was auch immer Website verwenden, sind Sie wahrscheinlich besser dran, indem Sie einfach ein Array von Werten und Anzeigewerte, so dass Sie können den Webservice in anderem Code wiederverwenden.

Ihr Code funktioniert jetzt nur in einer HTML-Umgebung. Was ist, wenn Sie morgen eine .NET/C++/was auch immer App schreiben müssen, die Ihren Webservice nutzt? Dann müssen Sie es ändern. Und das ist nicht der Punkt von Webservices. Webservices fördern die Wiederverwendbarkeit von Code. Und du kämpfst dagegen. (Und der Code wird gewinnen!)

+0

Danke Schlange für die Antwort. Leider sind meine Hände ein wenig gebunden. Ich verwende jqGrid, und die einzige Möglichkeit, ein ddl für Suchparameter zu erstellen, besteht darin, einen Webdienst aufzurufen, der den HTML-Code zurückgibt. Ich habe die Frage bearbeitet, um das zu reflektieren. Ich habe keine Möglichkeit, den zurückgegebenen String zu manipulieren, sonst könnte ich in Javascript unlescape. – Col

6

Ich weiß, dass dies eine alte Post, aber für einen Dienst, der nur in IIS gehostet wird, hier ist eine einfache Möglichkeit, html zurückzukehren:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public Stream getHtml() 
{ 
    // get the html 
    var html = DoSomethingToGetHtml(); //Not a built-in .Net method ;) 

    // we want our result interpreted as plain html 
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/html; charset=utf-8"; 

    // create a stream from our html because trying to return a string adds an extra header tag 
    //  to the response. Returning a stream returns the html by itself 
    var result = new MemoryStream(Encoding.UTF8.GetBytes(html)); 

    // return the result 
    return result; 
} 

Diesen Code müssen folgende Voraussetzungen erfüllt in der web.config den Hosting-Service:

<system.serviceModel> 
    <!-- enable HttpContext.Current by setting aspNetCompatibilityEnabled=true--> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

    <behaviors> 
     <endpointBehaviors> 
      <behavior name="webHttpEnabled">    
       <webHttp/> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    ... 
<system.serviceModel> 

in der Konfiguration für den Service, set behaviorConfiguration="webHttpEnabled".

Die Rückgabe von HTML auf diese Weise begrenzt die Wiederverwendbarkeit des Dienstes ein wenig, aber es ist eine einfache Möglichkeit, das Problem zu lösen, wenn Sie ziemlich sicher sind, dass der Dienst immer in IIS gehostet wird.

+0

Fehler Das Attribut 'AspNetCompatibilityRequirements' ist für diesen Deklarationstyp nicht gültig. Es gilt nur für "Klassen" -Deklarationen. –