1

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

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

但是,VS IDE 仍然抱怨缺少括号。我试过用<text></text>. 我也试过没有a:and 和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))),
4

1 回答 1

1

怀疑该行应该是:

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

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

很抱歉修改了您的逻辑,但我认为最好的做法是使用string.Format字符串插值,并避免在href属性中使用 javascript。

更新 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))),
于 2012-09-04T17:08:59.660 回答