如何在链接按钮的OnClientClick中调用java脚本函数(在.cs中)
本文关键字:函数 脚本 cs java 调用 按钮 链接 OnClientClick | 更新日期: 2023-09-27 18:26:10
我在.cs文件中写这样的脚本
StringBuilder script = new StringBuilder();
script.Append("<script type='"text/javascript'"> function submitform(){");
script.Append(" document.forms['" + ((HtmlGenericControl)frm).Attributes["id"] + "'].submit();} </");
script.Append("script>");
如何在链接按钮的OnClientClick
中调用此函数?
LinkButton hl_process = new LinkButton();
hl_process.OnClientClick = ""
第1版:
protected Control CreateCommForm()
{
HtmlGenericControl frm = new HtmlGenericControl("form");
frm.Attributes.Add("id", "sal");
frm.Attributes.Add("method", "post");
frm.Attributes.Add("action", "https://------");
/////////////////////////////////////////
HtmlGenericControl hdn_sal_a = new HtmlGenericControl("input");
hdn_sal_a.Attributes.Add("id", "hdn_sal_a");
hdn_sal_a.Attributes.Add("name", "hdn_sal_a");
hdn_sal_a.Attributes.Add("type", "hidden");
hdn_sal_a.Attributes.Add("value", Session["emp_num"].ToString());
/////////////////////////////////////////
HtmlGenericControl hdn_sal_b = new HtmlGenericControl("input");
hdn_sal_b.Attributes.Add("id", "hdn_sal_b");
hdn_sal_b.Attributes.Add("name", "hdn_sal_b");
hdn_sal_b.Attributes.Add("type", "hidden");
hdn_sal_b.Attributes.Add("value", Session["user_name"].ToString());
frm.Controls.Add(hdn_sal_a);
frm.Controls.Add(hdn_sal_b);
column1.Controls.Add(frm);
return frm;
}
将关注点分开如果将应用程序移动到java
或ruby
,则应用程序的可视化部分不应受到影响。这就是separate of concerns
。
在客户端中编写客户端脚本,而不是在cs文件中:
$('#<%= hl_process.ClientID %>').click(function(){
...
$('#formId').submit();
// if the button inside the form:
this.form.submit(); // HTML5
// Or:
$(this).closest('form').submit();
// if the button not inside the form :
var class = $(this).attr('class');
$('form.' + class).submit();
});
使用jquery绑定到点击事件,而不是在服务器端执行此操作:
<a href="#" class="blah">Submit Me</a>
然后在javascript中,类似于:
<script type="text/javascript">
$('.blah').click(function() {
document.forms[0].submit();
});
</script>
编辑:
虽然您可以使用codeehind生成UI元素,但这并不是asp.net的方式。如果必须重复生成控件,请使用中继器。事实上,创建多个表单也不是asp.net的方式,因为它假设只有一个表单在服务器上下文中运行,而其他所有表单在提交时都绑定到一个事件。不管怎样,你似乎还在学习asp.net,可能是从PHP或类似的东西开始的。
为了满足您的请求,我建议您不要在服务器端生成JS。为表单指定不同的类名,并使用上面相同的方法。提交表单不需要LinkButton
,一个简单的锚<a>
就可以了。
您可以使用ClientID
属性(如果不使用类),但必须首先将父控件附加到页面上,算法才能生效。
所以,你的代码应该是这样的:
protected Control CreateCommForm()
{
...
column1.Controls.Add(frm);
HtmlGenericControl a = new HtmlGenericControl("a");
a.Attributes["onclick"] = "$('#" + frm.ClientID + "').submit();";
a.InnerText = "Submit me";
frm.Controls.Add(a);
return frm;
}
替代方式(更好地分离关注点)
protected Control CreateCommForm()
{
...
column1.Controls.Add(frm);
HtmlGenericControl a = new HtmlGenericControl("a");
a.Attributes["class"] = "submitter";
a.InnerText = "Submit me";
frm.Controls.Add(a);
return frm;
}
在javascript中,我们找到父窗体并提交它(可以在静态js文件中):
<script type="text/javascript">
$('.submitter').click(function(
$(this).parents('form').submit();
));
</script>