result
result

Reputation: 45

How decode html content bound in json?

I am using asp.net application and using ajax call,below is my code.Below is my web method which is working fine and give response of ajax call.

ADController adc = new ADController();
        DataTable dt = adc.GetGeneral(Convert.ToInt32( AnnouncementId));// GetAnnouncementsByIDAndRead(Convert.ToInt32(AnnouncementId), Convert.ToInt32(userid));
        JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
        List<Dictionary<string, object>> parentRow = new List<Dictionary<string, object>>();
        Dictionary<string, object> childRow;
        foreach (DataRow row in dt.Rows)
        {
            childRow = new Dictionary<string, object>();
            foreach (DataColumn col in dt.Columns)
            {
                if (col.ColumnName == "description")
                {
                    childRow.Add(col.ColumnName, HttpUtility.HtmlDecode( Convert.ToString( row[col]) )as object);
                }
                else 
                childRow.Add(col.ColumnName, row[col]);
            }
            parentRow.Add(childRow);
        }
        return jsSerializer.Serialize(parentRow);

following is my ajax code ,which is working fine and giving data on call fine.

 function fnshowAncDetails(AnnouncementId, userid) {
    $(".loading").show();
    var url = $("[id$='hdURLt']").val();
    $("[id$='btnSaveMD']").show();
    $.ajax({
        type: "POST",
        url: url + "/GetInfo.aspx/General",
        data: '{AnnouncementId:"' + AnnouncementId + '",userid:"' + userid + '"}',
        contentType: "application/json; charset=utf-8",
        //dataType: "json",
        success: OnSuccessSetCGiven,
        error: function (response) {

        }
    });
    var vtext = $("[id$='lblAnnoucement']").text();
    if (vtext != 0) {
        vtext = vtext - 1;
    }
    $("[id$='lblAnnoucement']").text(vtext);
}

below is my success method

  function OnSuccessSetCGiven(response) {
    var parsed = $.parseJSON(response.d);

    $("[id$='htititlen']").text(parsed[0].Title);
    $("[id$='divNotifBody']").text(parsed[0].Description);


    $("[id$='divadded']").text("By:"+parsed[0].FirstName + " " + parsed[0].LastName);
    $("#divNotifdetails").modal('show');
    $(".modal-backdrop").css('z-index', '0');
    $(".loading").hide();

    var formattedTime = parsed[0].stime.Hours + ":" + parsed[0].stime.Minutes;
    //$("[id$='divtime']").text(formattedTime);
    $("[id$='divdate']").text("Time:" +parsed[0].startdate + " " + formattedTime);
}

Now my question is in The Description there may be html tags, means formatted htmls,like <p>xxx</p><b>sdf</b>. So it not loaded as bold, how can I render formatted html?

Upvotes: 0

Views: 115

Answers (1)

Ron Dadon
Ron Dadon

Reputation: 2706

Use jQuery .html function and not .text:

function OnSuccessSetCGiven(response) {
    ...
    $("[id$='divNotifBody']").html(parsed[0].Description);
    ...
}

But note that you will have JS injection vulnerability, so you must clean the HTML code in the description field and remove unwanted attributes & tags (for example: <script>, <any onclick=""> etc.)

Update:

By the way, I am not familiar with this selection syntax:

$("[id$='divNotifBody']")

Assuming that you want to select a div with the id "divNotifBody", Why not just use:

$("#divNotifBody")

Upvotes: 1

Related Questions