我继承了一个设计糟糕的ASP.NET项目;在一个部分中,标签用标签包装以允许“单击行以查看信息”功能。代码是:
<asp:LinkButton ID="ViewArticle" runat="server" CommandName="Navigate" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "id") %>' >
<tr runat="server" class="list_item">
<td>some data</td>
<td>some data</td>
<td>some data</td>
</tr>
</asp:LinkButton>
我想做点什么:
<tr runat="server" class="list_item" onclick="doRowPostbackFunction('<%# DataBinder.Eval(Container.DataItem, "id") %>');">
<td>some data</td>
<td>some data</td>
<td>some data</td>
</tr>
如何将JavaScript“onclick”事件绑定到代码隐藏?
答案 0 :(得分:1)
使用jQuery,您可以执行以下操作并触发回发:
<table>
<tr id="1">
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
</tr>
<tr id="2">
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
</tr>
<tr id="3">
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
</tr>
</table>
<script type="text/javascript">
$(function () {
$("table tr").click(function (e) {
//alert the row index that was clicked
alert($("table tr").index(this));
//alert the id of the row
alert($(this).attr("id"));
//submit the form...
});
});
</script>
或者使用行的onclick事件......
<tr onclick="doPostBack('<%#DataBinder.Eval(Container.DataItem, "id") %>')">
...并触发javascript函数。
<script type="text/javascript">
function doPostBack(id)
{
//submit form
}
</script>
答案 1 :(得分:0)
你可以使你的页面(或控件,如果它在控件内)实现IPostBackEventHandler接口并使用ClientScriptManager.GetPostBackEventReference方法(使用Page.ClientScript propery来获取对ClientScriptManager的引用)来获取一个js-method-call-string,它将回发到你的页面。作为GetPostBackEventReference方法的控件参数,请使用您的页面。 然后将tr的onclick属性设置为js-method-call-string。
在aspx中:
<table>
<tr onclick="<%= _jsPostBackCall %>;">
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
</table>
<h1>
<asp:Literal ID="litMessage" runat="server" />
</h1>
在codebehind中:
public partial class _Default : System.Web.UI.Page, IPostBackEventHandler
{
protected String _jsPostBackCall;
protected void Page_Load(object sender, EventArgs e)
{
// "myTr" will be passed as an argument to RaisePostBackEvent method
_jsPostBackCall = ClientScript.GetPostBackEventReference(this, "myTr");
}
public void RaisePostBackEvent(string eventArgument)
{
switch (eventArgument)
{
case "myTr":
HandleTrClick();
break;
// you can add other controls that need postback processing here
default:
throw new ArgumentException();
}
}
private void HandleTrClick()
{
litMessage.Text = "Tr clicked.";
}
}
答案 2 :(得分:0)
您只需使用
即可__doPostBack(eventName, eventArgs);
此处eventName是代码隐藏事件处理程序