如何使用剃刀语法在剑道网格列模板中调用 javascript 函数

tom*_*omc 2 javascript grid razor asp.net-mvc-4 kendo-ui

我已经用 MVC4 和 Razor 语法实现了一个 Kendo Grid。此网格显示数据库表中的日志条目。LogText 列包含带有 Windows 换行符的文本。我正在尝试用换行符标签替换这些换行符。为此,我创建了一个想要从列模板调用的 javascript 函数。网格使用服务器绑定。我似乎无法找到从模板中进行 javascript 调用的正确语法。我看过很多例子,但似乎没有一个与 Razor 语法有关。我希望有人能帮我解决这个问题。

这是我的代码:

@model IEnumerable<Core.Models.ShipmentLog>

@{
    ViewBag.Title = "ShipmentLog";
}

<h2>ShipmentLog</h2>
@(Html.Kendo().Grid(Model)
    .Name("ShipmentLogGrid")
    .Columns(columns=>
    {
        columns.Bound(bl => bl.UserName);
        columns.Bound(bl => bl.LogTime);
        columns.Bound(bl => bl.LogType);
        columns.Bound(bl => bl.LogText).Width(600).Encoded(false).Template(#=  GetHtmlNewLinesString(@item.LogText) #);

    })

)

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

<script type="text/javascript">
    function getHtmlNewLinesString(text) {
        return text.replace('\n/g', '<br />');
    }
</script>
Run Code Online (Sandbox Code Playgroud)

CSh*_*per 5

@(Html.Kendo().Grid(Model)
.Name("Details")
.Columns(columns =>
{
    columns.Bound(m => m.SubSystemOrderId).Title("Subsys #");
    columns.Bound(m => m.Description).Title("Description").Template(@<text><a href="javascript: void(0);" onclick="return window.top.DisplayExternalOrderDetails('@item.SubSystemOrderId', '@item.OrderDetailTypeId', '@item.ProposalId', '@ViewBag.MyOpExUser', '@ViewBag.selectedOpportunityId')">@item.Description</a></text>);
    columns.Bound(m => m.SubSystemStatusName).Title("Status");
    columns.Bound(m => m.GrossRevenue).Title("Gross Revenue").Format("{0:c}");
    columns.Bound(m => m.IncludeInForecast).Title("Include In Forecast").Template(m=>m.IncludeInForecast ? "Yes" : "No");
    columns.Bound(m => m.ProposalId).Title("Proposal Id").Visible(false);

})
)
Run Code Online (Sandbox Code Playgroud)

另一个例子

columns.Bound(m => m.OpportunityName).Title("Opportunity Name").ClientTemplate("<a href='javascript: void(0);' onclick=\"return openMSDynamicsWindow('#= OpportunityUrl #');\">#= OpportunityName #</a>").HtmlAttributes(new { @class = "k-link" });
Run Code Online (Sandbox Code Playgroud)

你会看到 im 传入函数'#= OpportunityUrl #'。这就是您可以从模型中获取值的方法。 #= OpportunityName #将是链接文本。

这是一个更复杂的例子,你真的可以做任何你想做的事。只是让基于字符串的废话工作真的很痛苦

columns.Bound(m => m.Dollars).Title("").ClientTemplate(
          "# if (Dollars == null) { #" +
          "" +
          "# } else if (Dollars == 0) { #" +
          "<div>#= kendo.toString(Dollars, 'c') #</div>" +
          "# } else if (Count > 0) { #" +
          "<a href='javascript: void(0);' onclick=\"return window.top.openOrderDetails('#= Count #','#= Type #','#= DetailId #','#= OrderId #','#= User #','#= SelectedId #');\">#= kendo.toString(Dollars, 'c') #</a>" +
          "# } #"
          )
Run Code Online (Sandbox Code Playgroud)