c# - 在 webgrid 中调用 javascript

标签 c# javascript asp.net asp.net-mvc-3 webgrid

我在 webgrid 中调用 javascript 函数时遇到问题

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

Id CarrierName 中有空格(对于前“Carrier A”),呈现的 html 是:

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

如何格式化行以提供正确的输出?

最佳答案

你可以试试 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>")
    )) 
%>

但我会尝试通过编写一个将生成 anchor 的自定义 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)
    )   
)

关于c# - 在 webgrid 中调用 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8694468/

相关文章:

asp.net - visual studio 没有 asp.net 的可能性

javascript - IFrame OnReadyStateChange 函数

c# - Windows 上的 .net core 3.0 忽略了 NO_PROXY

c# - 难以比较 DateTimes 中的差异

c# - 嵌套集合属性上的 EF Core 总和不起作用

c# - 为什么我的 disableButtons 方法不起作用?

javascript - 从 JavaScript 触发事件

javascript - Pusher.com - 当有人连接/断开连接时收到服务器端通知

javascript - 创建段落节点时遇到问题

asp.net - HTTP 错误 404.17 - 未找到 - .NET - IIS 10