混合Razor和JavaScript

时间:2012-09-04 16:28:31

标签: asp.net-mvc razor

我正在尝试在webgrid中使用锚标记来调用javascript函数。我无法正确理解语法。这就像我来的那样接近:

gridSpecs.Column(header: "", columnName: "", format: (item) => @:<a href="javascript:void(0);" onclick="DoSomeWork(@item.EquipmentId);">x</a>),

然而,VS IDE仍然抱怨缺少括号。我尝试用<text></text>包装锚标记。我也尝试过没有a:a:(上图)。

我应该如何使用锚点来调用我的javascript方法?

我甚至尝试过Html.ActionLink(),但这会调用服务器,我不想这样做:

@Html.ActionLink("x", null, new { id = item.Id }, new { onlick = "DoSomeWork();" })

如果有帮助,这里是整个webgrid HTML:

<div class="webgrid-wrapper">
    <div id="grid">
        @gridSpecs.GetHtml(
            tableStyle: "webgrid",
            headerStyle: "webgrid-header",
            footerStyle: "webgrid-footer",
            alternatingRowStyle: "webgrid-alternating-rows",
            columns: gridSpecs.Columns(
                gridSpecs.Column(header: "", columnName: "", format: (item) => @:<a href="javascript:void(0);" onclick="DoSomeWork(@item.EquipmentId);">x</a>),
                gridSpecs.Column("Equipment.EquipmentId", "ID"),
                gridSpecs.Column("Equipment.Name", "Name"),
                gridSpecs.Column("Equipment.LegacyEquipmentId", "Legacy ID")))
    </div>
</div>

这是最终奏效的行:

(希望这有助于拯救别人两个小时......)

gridSpecs.Column(header: "", columnName: "",
    format: (spec) => MvcHtmlString.Create(string.Format("<a href='' onclick='DoSomeWork({0}); return false;'>x</a>", spec.Equipment.EquipmentId))),

1 个答案:

答案 0 :(得分:1)

怀疑该行应该是:

gridSpecs.Column(header: "", columnName: "", format: (item) => string.Format("<a href=\"\" onclick=\"DoSomeWork({0}); return false;\">x</a>", item.EquipmentId)),

您的方法不起作用,因为该行是.net代码,并且已经在剃须刀上下文中。您只能使用@:<text>来突破Razor上下文(即将该行的其余部分写入响应),这在此处不合适。

很抱歉修补你的逻辑,但我认为最好使用string.Format进行字符串插值,并避免在href属性中使用javascript。

UPDATE v2 (v1不合适:)

我没有使用过WebGrid,所以我没有意识到它转发了发送到format属性的HTML。你能试试这个:

gridSpecs.Column(header: "", columnName: "", format: (item) => MvcHtmlString.Create(string.Format("<a href=\"\" onclick=\"DoSomeWork({0}); return false;\">x</a>", item.EquipmentId))),