Вызов JavaScript в веб-сетке - PullRequest
       6

Вызов JavaScript в веб-сетке

1 голос
/ 01 января 2012

У меня проблемы с вызовом функции javascript в сетке

<%= gridColumns.Add(grid.Column("CarrierName", "CarrierName",  
 format: (item) => new HtmlString("<a src='#' id='test'   
onclick=alert('"+item.CarrierName+"');>"+ (string)item.CarrierName + "</a>"))); %>

Если в CarrierName есть пробелы (например, «Перевозчик A»), рендеринг html:

<a id="test" onclick="alert('Carrier" src="#" A?);="">

Как мне отформатировать строку, чтобы получить правильный вывод?

1 Ответ

3 голосов
/ 01 января 2012

Вы можете попробовать JSON-кодировку:

<%= gridColumns.Add(
    grid.Column(
        "CarrierName", 
        "CarrierName",  
        format: (item) => new HtmlString("<a src='#' id='test' onclick='alert(" + Json.Encode(item.CarrierName) + ");'>" + Html.Encode(item.CarrierName) + "</a>")
    )) 
%>

Но я бы постарался избежать этого супа тегов, написав собственный HTML-помощник, который сгенерирует якорь:

public static class HtmlExtensions
{
    public static IHtmlString Link(this HtmlHelper htmlHelper, MyViewModel item)
    {
        var anchor = new TagBuilder("a");
        anchor.AddCssClass("test");
        anchor.Attributes["src"] = "#";
        anchor.Attributes["onclick"] = string.Format(
            "alert({0});", Json.Encode(item.CarrierName)
        );
        anchor.SetInnerText(item.CarrierName);
        return new HtmlString(anchor.ToString());
    }
}

изатем:

grid.Columns(
    grid.Column(
        "CarrierName",
        "CarrierName",
        format: item => Html.Link((MyViewModel)item.Value)
    )   
)
...