我在ASP.NET webusercontrol中有一个html超链接,我将runat服务器属性添加到html超链接并触发onserverclick事件以从C#文件后面的代码处理它,但是当事件触发时,href标记变为“javascript:__ doPostBack ('controlname $ linkId','')事件不会触发。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="uc_users.ascx.cs" Inherits="ExtRa.uc_users" %>
<div class="panel panel-inverse" style="padding-top: 3%; padding-left: 3%;">
<!-- begin panel-heading -->
<div class="uk-grid">
<div class="uk-width-1-1">
<div class="md-card">
<div class="md-card-toolbar">
<div class="md-card-toolbar-actions">
<i class="md-icon material-icons md-card-fullscreen-activate"></i>
<i class="md-icon material-icons"></i>
<div class="md-card-dropdown" data-uk-dropdown="{pos:'bottom-left'}">
<i class="md-icon material-icons"></i>
<div class="uk-dropdown uk-dropdown-small">
<ul class="uk-nav">
<li><a href="#">Action 1</a></li>
<li><a href="#">Action 2</a></li>
</ul>
</div>
</div>
</div>
<h3>المستخدمين
</h3>
</div>
<div class="md-card-content">
<div class="md-card uk-margin-medium-bottom">
<div class="md-card-content">
<div class="uk-overflow-container">
<table id="users_table" <%--class="display"--%> class="uk-table uk-table-nowrap table_check">
<thead>
<tr>
<th class="uk-width-1-10 uk-text-center">الاكشن</th>
<th class="uk-width-1-10 uk-text-center">الصورة</th>
<th class="uk-width-1-10 uk-text-center">الاسم</th>
<th class="uk-width-1-10 uk-text-center">اسم المستخدم</th>
<th class="uk-width-1-10 uk-text-center">الشركة</th>
<th class="uk-width-1-10 uk-text-center">تاريخ الانشاء</th>
<th class="uk-width-1-10 uk-text-center">المبلغ المسموح التعامل به</th>
<th class="uk-width-1-10 uk-text-center">فعال ؟</th>
</tr>
</thead>
<tbody>
<%
System.Data.DataTable dt = getUsers();
int rowsCount = dt.Rows.Count;
int totalPages = rowsCount / 5;
foreach (System.Data.DataRow cr in dt.Rows)
{
string u_id = cr["USER_ID"].ToString();
string u_image = cr["IMAGE"].ToString();
string u_name = cr["USER_NAME"].ToString();
string u_login_name = cr["LOGIN_NAME"].ToString();
string u_company = cr["COMPANY_ID"].ToString();
string u_c_date = cr["CREATE_DATE"].ToString();
string u_max_amount = cr["MAX_AMOUNT"].ToString();
string c_is_active = cr["IS_ACTIVE"].ToString();
string u_is_logged = cr["IS_LOG_IN"].ToString();
%>
<tr>
<td class="uk-text-center">
<a href="#" id="btn_edit" runat="server" onserverclick="btn_edit_ServerClick"><input type="hidden" id="h_edit" value='<%= u_id %>' runat="server" /><i class="md-icon material-icons"></i></a>
<a href="#"><i class="md-icon material-icons">delete</i></a>
</td>
<td class="uk-text-center"><img class="md-user-image" src='<%="assets/img/user/" + u_image %>' alt=""/></td>
<td class="uk-text-center"><%= u_name %></td>
<td class="uk-text-center"><%= u_login_name %></td>
<td class="uk-text-center"><%= u_company %></td>
<td class="uk-text-center"><%= u_c_date %></td>
<td class="uk-text-center"><%= u_max_amount + " $" %></td>
<td class="uk-text-center">
<%
string active_class = "", activ_txt = "";
if (c_is_active == "1")
{
active_class = "uk-badge uk-badge-success";
activ_txt = "فعال";
}
else
{
active_class = "uk-badge uk-badge-danger";
activ_txt = "غير فعال";
}
%>
<span class='<%=active_class%>'><%=activ_txt %></span>
</td>
<td>
<%
string login_class = "", login_txt = "";
if (u_is_logged == "1")
{
login_class = "uk-badge uk-badge-defualt";
login_txt = "مسجل دخول";
}
else
{
login_class = "uk-badge uk-badge-warning";
login_txt = "غير مسجل الدخول";
}
%>
<span class='<%=login_class%>'><%=login_txt %></span>
</td>
</tr>
</tbody>
</table>
</div>
<ul id="com_pages" class="uk-pagination uk-margin-medium-top">
<li class="uk-disabled"><span><i class="uk-icon-angle-double-left"></i></span></li>
<li class="uk-active"><span>1</span></li>
<li><a href="#" onclick="">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><span>…</span></li>
<li><a href="#">10</a></li>
<li><a href="#"><i class="uk-icon-angle-double-right"></i></a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- end panel-heading -->
</div>
背后的代码:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ExtRa.Data;
namespace ExtRa
{
public partial class uc_users : System.Web.UI.UserControl
{
DataAccess da = new DataAccess();
protected void Page_Load(object sender, EventArgs e)
{
}
public DataTable getUsers(){ return da.users_get(); }
protected void btn_delete_ServerClick(object sender, EventArgs e){}
protected void btn_edit_ServerClick(object sender, EventArgs e)
{
Session["action"] = "edit";
Session["u_a_id"] = h_edit.Value;
}
}
}
那么,我如何从服务器端获取事件?
问题在于“CausesValidation”
在控件上设置CausesValidation =“false”,它将从输出的控件中删除:javascript: __doPostBack('
在此页面的某个位置或此输出中包含的某个位置,您可能具有RequiredFieldValidator。一旦你向页面添加一个,你开始得到这个_doPostBack的东西,因为VS认为它应该首先被验证。