如何从代码隐藏调用 javascript 函数

IT技术 javascript asp.net
2021-01-16 10:53:20

我用asp.net 页面写了一个javascript。

在 Asp.net 页面中

<HTML> <HEAD>
     <script type="text/javascript">
      function Myfunction(){
          document.getElementId('MyText').value="hi";
      }
      </script>
</HEAD> <BODY>
<input type="text" id="MyText" runat="server" /> </BODY>

在代码隐藏中

 Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
  Handles Me.Load
       If Session("My")= "Hi" Then
          I want to call "Myfunction" javascript function
       End If 
 End Sub

我能怎么做?

5个回答

一种方法是使用ClientScriptManager

Page.ClientScript.RegisterStartupScript(
    GetType(), 
    "MyKey", 
    "Myfunction();", 
    true);
最好的解决方案,非常简单
2021-03-18 10:53:20
关键应该是一个 GUID!
2021-03-21 10:53:20
密钥只是一个唯一标识符,可帮助避免两次发出相同的脚本。它可以是任何东西。
2021-03-30 10:53:20
如果您希望在页面加载后执行 javascript 函数,请参见此处stackoverflow.com/a/40335689/74585
2021-04-09 10:53:20
看起来最好的方式是你的,但“MyKey”是什么?
2021-04-14 10:53:20

这是一种从后面的代码调用一个或多个 JavaScript 方法的方法。通过使用脚本管理器,我们可以按顺序调用方法。例如,考虑下面的代码。

ScriptManager.RegisterStartupScript(this, typeof(Page), "UpdateMsg", 
    "$(document).ready(function(){EnableControls();
    alert('Overrides successfully Updated.');
    DisableControls();});", 
true);

在第一个方法中,EnableControls() 被调用。接下来将显示警报。接下来将调用 DisableControls() 方法。

有一种非常简单的方法可以做到这一点。它涉及从后面的代码向标签控件注入 javascript 代码。这是示例代码:

<head runat="server"> 
    <title>Calling javascript function from code behind example</title> 
        <script type="text/javascript"> 
            function showDialogue() { 
                alert("this dialogue has been invoked through codebehind."); 
            } 
        </script> 
</head>

.....

lblJavaScript.Text = "<script type='text/javascript'>showDialogue();</script>";

在此处查看完整代码:http : //softmate-technologies.com/javascript-from-CodeBehind.htm(已失效)
来自 Internet Archive 的链接:https ://web.archive.org/web/20120608053720/http: // softmate-technologies.com/javascript-from-CodeBehind.htm

喜欢这个解决方案 - 感觉就像是在作弊。我怀疑它可能不适合所有场景,但我很难想到它不起作用的情况。
2021-03-18 10:53:20
不幸的是,链接已损坏:-(
2021-03-21 10:53:20

如果执行的顺序并不重要,并且您需要在 asp 元素上触发一些 javascript 和一些代码隐藏,那么您可以执行以下操作。

您可以从我的示例中获得什么:我有一个 div 覆盖 ASP 控件,我希望同时运行 javascript 和代码隐藏。div 的 onClick 方法和日历的 OnSelectionChanged 事件都以这种方式触发。

在这个例子中,我使用了一个 ASP 日历控件,我从 javascript 和代码隐藏中控制它:

前端代码:

        <div onclick="showHideModal();">
            <asp:Calendar 
                OnSelectionChanged="DatepickerDateChange" ID="DatepickerCalendar" runat="server" 
                BorderWidth="1px" DayNameFormat="Shortest" Font-Names="Verdana" 
                Font-Size="8pt" ShowGridLines="true" BackColor="#B8C9E1" BorderColor="#003E51" Width="100%"> 
                <OtherMonthDayStyle ForeColor="#6C5D34"> </OtherMonthDayStyle> 
                <DayHeaderStyle  ForeColor="black" BackColor="#D19000"> </DayHeaderStyle>
                <TitleStyle BackColor="#B8C9E1" ForeColor="Black"> </TitleStyle> 
                <DayStyle BackColor="White"> </DayStyle> 
                <SelectedDayStyle BackColor="#003E51" Font-Bold="True"> </SelectedDayStyle> 
            </asp:Calendar>
        </div>

代码隐藏:

        protected void DatepickerDateChange(object sender, EventArgs e)
        {
            if (toFromPicked.Value == "MainContent_fromDate")
            {
                fromDate.Text = DatepickerCalendar.SelectedDate.ToShortDateString();
            }
            else
            {
                toDate.Text = DatepickerCalendar.SelectedDate.ToShortDateString();
            }
        }
asp:运行javascript方法

将此行添加到页面底部的</form>tag之前,至少在js您编写函数

这样做的原因是避免在浏览之前调用您的方法,知道功能是什么,最后什么都不做。

<% Response.Write($"<script>yourfunction('{Config.id}');</script>"); %>

ps:我已经尝试了那里的所有方法,但对我来说没有任何效果。我自己想出了这个简单而奇妙的调用 js 方法的方法!