2010-10-12 122 views
0

我试图使用jQuery .load()从一个ASMX web服务获得直接的html:如何从ASMX Web服务调用得到干净的/纯HTML

$( '#目标')负载(” MyService.asmx/GetHtml');

在.NET代码,GetHtml()返回作为字符串:

[WebMethod(EnableSession = false)] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Xml)] 
    public string GetHtml() 
    { 
     return "<span>Hi</span>"; 
    } 

返回:

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://tempuri.org/">&lt;span&gt;Hi&lt;/span&gt;</string> 

注意,串进行编码。使用该编码,$ .load不起作用。显示的文本实际上显示了标签。

如何才能让WebMethod调用返回这个?

<span>Hi</span> 

回答

4

我敢肯定,如果你想直接从服务返回HTML,你需要使用处理程序(.ashx)而不是.asmx。我不知道如何让.asmx不以某种格式编码数据(尽管您可以更改该格式)。

这就是说,@Randolpho也有一个好点。

6

如何:

而不是从服务拉动的HTML,拉数据,然后使用jQuery这些数据插入到DOM。

然后,您将不必XML解码您的HTML。

+0

我不认为我会想到这一点。谢谢。我打算使用@ Andrew的建议,因为它允许我使用简单的.load()调用。 – slolife 2010-10-13 16:35:08

0

最简单的方法是根本不使用Web服务。带有包含HTML的响应的HTTP请求基本上是在网络上发生的最常见的操作,因此默认工具旨在执行此操作。在asp.net的情况下,这将是一个aspx文件。

1

简短的回答(正如其他海报所建议的)是:不要这样做。返回JSON并使用JS将其制作成所需的HTML。 See this discussion了解更多详情/评论。但是,如果你别无选择,只能返回HTML(也许你的项目经理/架构师害怕真正的web服务设计,出于某种原因),我同意Jake T的答案:使用ajax来调用ASPX页面。

ASPX的整个生活目标是返回HTML(与ASMX或ASHX不同)。最重要的是,写得很好的ASPX将HTML与逻辑/代码隐藏分开。这样,当您需要将HTML从列表更改为表(或其他)时,您可以在不重新编译,重新测试和重新部署整个系统的情况下执行此操作! :)

+0

我的目标是在javascript内不创建大量的HTML。使设计和产生真正的痛苦。我正在做的是创建一些ASCX用户控件,在请求时创建特定的HTML。我使用一些代码将用户控件呈现为一个字符串并返回。 Per @ Andrew的建议是,我使用的是处理程序而不是web服务。我已经走下了使用web服务的路径,只返回数据到浏览器,并使用javascript来循环这些数据来克隆和创建html。 – slolife 2010-10-13 16:52:43