如何在ajax jquery方法中传递Server.HtmlEncode

时间:2017-04-26 08:08:09

标签: javascript c# jquery ajax asp.net-mvc-4

我正在使用Server.HtmlEncode

对字符串进行编码,因为它不支持撇号

Example-"Capacit's Infraprojects Limited" changes  to 
 "Capacit&amp;#39;e" Infraprojects Limited <br>
So I used  Server.HtmlEncode to resolve it 

 <a onclick="setOfferDocument('@Server.HtmlEncode(documents.CompanyName)')"  class="link-download" href="javascript:void(0)" 
 >@Server.HtmlDecode(documents.CompanyName)</a>

现在我有一个下拉列表,点击公司名称即可获取数据 为此,我使用ajax函数

下拉 -

<select id="single-appendSpeaker" onchange="GetSelectedOfferData()" class="select2" style="width:;">    
            <option value="All">All</option>       
                         </select>     

Ajax函数我在哪里获得了comapny的名称

function GetSelectedOfferData() {
    debugger;
        var companyName = $("#single-appendSpeaker").val();
        if (companyName == "All") {
            $.ajax({
                type: "POST",
                dataType: "json",
                url: "/OfferDocument/getAllOfferDocument",
                data: {},
                success: function (result) {
                    var doc = '';


                    $.each(result, function (i, val) {
                        doc = doc + '<li><a onclick="setOfferDocument(\'' + val.companyName  + '\')"  class="link-download" href="javascript:void(0)" >' + val.companyName  + '</a><br /></li>'
                    });
                    $("#ProspectUL").empty();
                    $("#ProspectUL").append(doc);
                }
            });           
         }
        else {
            var data = '';    

            data = data + '<li><a onclick="setOfferDocument(\'' + companyName  + '\')"  class="link-download" href="javascript:void(0)" >' + companyName + '</a><br /></li>'
            $("#ProspectUL").empty();
            $("#ProspectUL").append(data);           
        }
    }

现在由于名称不匹配,我没有得到这个值, 因为我需要编码这个值
例如,Capacit的Infraprojects仅限于Capacit&amp;#39; e&#34; Infraprojects Limited

然后只有它会匹配,我会得到数据......

我试过

 doc = doc + '<li><a onclick="setOfferDocument(\'' + @Server.HtmlEncode(val.companyName)  + '\')"  class="link-download" href="javascript:void(0)" >' +@Server.HtmlEncode(val.companyName)  + '</a><br /></li>'
                        });

不工作

2 个答案:

答案 0 :(得分:0)

也许你可以使用正则表达式替换' 当量:

var regexp = new RegExp(/'/g);
var s = "Capacit's";
console.log(s.replace(regexp, "&#39;e"));

答案 1 :(得分:0)

首先,您需要使用JavaScriptStringEncode,因此请替换

<a onclick="setOfferDocument('@Server.HtmlEncode(documents.CompanyName)')"...

with:

<a onclick="setOfferDocument('@Html.Raw(System.Web.HttpUtility.JavaScriptStringEncode(documents.CompanyName))')"

另请注意@Html.Raw(...)的使用情况。这将阻止MVC在渲染输出时应用html编码。

其次,要修复构建li项目的代码,我建议使用这样的方法:

$('<a class="link-download" href="javascript:void(0)">').click(function(){ setOfferDocument("" + companyName)} );