我正在尝试在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))),
答案 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))),