我想知道是否有人知道使用jquery进行客户端验证的方法,然后手动为asp.net控件运行回发事件?
这是一个示例主页面 即。
<script type="text/javascript">
$(document).ready(function() {
$("#<%=lnkbtnSave.ClientID %>").click(function() {
alert("hello");
// Do some validation
// If validation Passes then post back to lnkbtnSave_Click Server side Event
});
});
</script>
<asp:LinkButton ID="lnkbtnSave" runat="server" onclick="lnkbtnSave_Click" ><asp:Image ID="Image3" runat="server" ImageUrl="~/images/save.gif" AlternateText="Save" />Save</asp:LinkButton>
母版页代码背后
public delegate void MasterPageMenuClickHandler(object sender, System.EventArgs e);
public event MasterPageMenuClickHandler MenuButton;
protected void lnkbtnSave_Click(object sender, EventArgs e)
{
// Assign value to public property
_currentButton = "Save";
// Fire event to existing delegates
OnMenuButton(e);
}
protected virtual void OnMenuButton(EventArgs e)
{
if (MenuButton != null)
{
//Invokes the delegates.
MenuButton(this, e);
}
}
内容页面代码
protected void Page_Load(object sender, EventArgs e)
{
Master.MenuButton += new Form.MasterPageMenuClickHandler(Master_MenuButton);
}
void Master_MenuButton(object sender, EventArgs e)
{
switch (Master.CurrentButton)
{
case "Save":
Save();
break;
case "New":
Response.Redirect("ContentPage.aspx");
break;
default:
break;
}
}
此外,控件lnkbtnSave位于母版页中,因此我如何确定我所在的内容页面,因为每个内容页面都有自己的控件来验证。
感谢您的帮助
答案 0 :(得分:4)
如果你反过来看它可以简化。您可以根据需要验证并阻止回发,而不是进行验证然后启动回发。
$('#<%= lnkbtnSave.ClientID %>').click(function(e) {
if (!validate()) {
e.preventDefault(); //will stop the page from posting back.
}
});
如果你真的需要启动回发(并以其他方式执行),你可以在进行验证后显式调用ASP.NET为你提供的__doPostBack()函数。
// This does the exact same thing as above, but it explicitly calls __doPostBack
// If you use the above code __doPostBack will be called automatically for you.
$('#<%= lnkbtnSave.ClientID %>').click(function(e) {
if (validate()) {
__doPostBack('<%= lnkbtnSave.ClientID %>','');
}
e.preventDefault();
});
如果有任何需要澄清,请告诉我。
答案 1 :(得分:2)
对于第一个问题,您应该能够返回true以使linkbutton回发并返回false以停止它。
$(document).ready(function() {
$("#<%=lnkbtnSave.ClientID %>").click(function() {
alert("hello");
var isValid = false;
// Do some validation
return isValid;
});
});
对于第二个问题,您可以让每个页面添加自己的验证脚本版本,并让母版页中的函数使用它来确定有效性:
母版页:
$(document).ready(function() {
$("#<%=lnkbtnSave.ClientID %>").click(function() {
return pageIsValid();
});
});
内容页面:
function pageIsValid() {
var isValid = false;
//validation logic
return isValid;
}
答案 2 :(得分:2)
您可以使用CustomValidator
控件并将其设置为ClientValidationFunction
属性。