如何使用razor语法调用kendo网格列模板中的javascript函数

时间:2014-02-07 17:36:47

标签: javascript asp.net-mvc-4 razor kendo-ui grid

我已经使用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>

3 个答案:

答案 0 :(得分:4)

@(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);

})
)

另一个例子

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" });

你会看到我进入函数'#= 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>" +
          "# } #"
          )

答案 1 :(得分:1)

这可以在没有javascript的情况下实现,但是有关如何使用模板的知识,请参阅@C Sharper的答案。

http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/configuration#template

columns.Bound(bl => bl.LogText)
       .Template(@<text>@item.LogText.Replace(System.Environment.NewLine, "<br />"))
       .Width(600)
       .Encoded(false);

答案 2 :(得分:0)

这可能对某人有所帮助。我用它来在文本框中构建一个唯一的id。除此之外,您还可以轻松地在onclick或blur事件中写入。然后只需传入元素ID。

 Html.Kendo().Grid((List<RadCarePlus.V2.Web.Models.Facilities>) ViewData["FacilitiesList"])
.Name("Facilities")
.Columns(columns =>
{   int i = 0;
    columns.Bound(c => c.ProviderID).Title("Provider Number").Width(150).HtmlAttributes(new { style = "text-align:center; white-space: nowrap;" }).HeaderHtmlAttributes(new { style = "text-align:center; white-space: nowrap;" });
    columns.Bound(c => c.NPI).Title("NPI").Width(150).HtmlAttributes(new { style = "text-align:center; white-space: nowrap;" }).HeaderHtmlAttributes(new { style = "text-align:center; white-space: nowrap;" });
    columns.Bound(c => c.ProviderFirstName).Template(c => c.ProviderFirstName + " " + c.ProviderLastName).Title("Provider Name").Width(140).HtmlAttributes(new { style = "text-align:center; white-space: nowrap; text-decoration: underline;" }).HeaderHtmlAttributes(new { style = "text-align:center; white-space: nowrap;" });
    columns.Bound(c => c.AddressLine1).Template(c => c.AddressLine1 + " " + c.AddressLine2 + "<BR>" + c.City + " " + c.State + " " + c.Zipcode).Title("Address").Width(140).HtmlAttributes(new { style = "text-align:left; white-space: nowrap;" }).HeaderHtmlAttributes(new { style = "text-align:left; white-space: nowrap;" });
    columns.Bound(c => c.Email).Template(c => "<input type='text' name='AdminEmail' id='" + (i = i + 1) + "' value='" + c.Email + "'> ").Title("Administrator").Width(140).HtmlAttributes(new { style = "text-align:center; white-space: nowrap; text-decoration: underline;" }).HeaderHtmlAttributes(new { style = "text-align:center; white-space: nowrap;" });          
})
.Sortable(sortable => sortable.AllowUnsort(false))
.DataSource(dataSource => dataSource.Server().PageSize(5)
)