如何在链接按钮的OnClientClick中调用java脚本函数(在.cs中)

How can i call java script function(in .cs) in the OnClientClick of the link button?

本文关键字:函数 脚本 cs java 调用 按钮 链接 OnClientClick      更新时间:2023-09-26

我在.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;
}

将关注点分开如果将应用程序移动到javaruby,则应用程序的可视化部分不应受到影响。这就是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>