2010-01-07 10 views
5

HTML이 포함 된 문자열을 반환해야하는 웹 서비스가 있습니다. 이 html은 Select 컨트롤 (jqGrid 검색 필터 용)의 마크 업입니다 (예 :wcf 서비스에서 html을 반환합니다.

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

내 문제가 있다는 것입니다 :

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

내 WCF 웹 서비스 인 문자열로이 값을 반환하는 방법 ...

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

및이 방법에 대한 계약을 포함 이스케이프 문자가 문자열에 삽입되어 반환 된 HTML이 쓸모 없게 렌더링됩니다.

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

닫는 중 <option><select> 태그의 인용 부호와 이스케이프 처리 된 '/'은 모두 문제를 일으 킵니다.

있는 jqGrid는 삽입 될 수 있도록 내가이 웹 서비스에서 클라이언트로 다시 순수 HTML을 반환하는 방법을, 내 질문은,

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

그래서 ... 드롭 다운을 표시 반환 된 HTML을 사용하여 내 HTML 페이지?

미리 도움 주셔서 감사합니다. Colin.

답변

0

자바 스크립트를 통해 사용한다고 가정합니다.

이스케이프 (응답)를하면 문제를 해결해야합니다.

반면에 JavaScript에서는 사용하지 않고 ASP.NET/PHP/어떤 웹 사이트에서나 사용하는 경우 값 배열과 값을 반환하면 더 편리 할 수 ​​있습니다. 다른 코드에서 웹 서비스를 재사용하십시오.

코드 조각이 이제 HTML 환경에서만 작동합니다. .NET/C++/내일의 웹 서비스를 사용하는 응용 프로그램을 작성해야하는 경우에는 어떻게해야합니까? 그런 다음 변경해야합니다. 그리고 그것은 웹 서비스의 요점이 아닙니다. 웹 서비스는 코드 재사용을 촉진합니다. 그리고 당신은 그것과 싸우고 있습니다. (그리고 코드가 이길 것입니다!)

+0

답장을 보내 주셔서 감사합니다. 불행히도 내 손이 좀 묶여있다. jqGrid를 사용하고 있으며 검색 매개 변수 용 ddl을 만드는 유일한 방법은 html을 반환하는 웹 서비스를 호출하는 것입니다. 나는 그것을 반영하기 위해 질문을 편집했다. 나는 반환 된 문자열을 조작 할 능력이 없다. 그렇지 않으면 자바 스크립트에서 unescape 할 수있다. – Col

6

을 나는 이것이 이전 게시물 알고 있지만 IIS에서 호스팅됩니다 서비스에 대한, 여기에 HTML을 반환 할 수있는 쉬운 방법입니다

[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; 
} 

이 코드를 필요로하는 서비스를 호스팅의 web.config에 다음 서비스에 대한 구성에서

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

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

behaviorConfiguration="webHttpEnabled"을 설정합니다.

이렇게 HTML을 반환하면 서비스의 재사용 가능성이 조금 떨어지지 만 서비스가 항상 IIS에서 호스팅되는 것이 합리적이라면 문제를 쉽게 해결할 수 있습니다.

+0

오류 'AspNetCompatibilityRequirements'특성이이 선언 형식에 유효하지 않습니다. '클래스'선언에서만 유효합니다. –

관련 문제