如何在razor v2中从c#调用javascript函数

时间:2013-02-07 21:27:23

标签: asp.net web webforms razor-2

我有javascript函数,它使用noty javascript插件创建通知,

    <script type="text/javascript">
    function generateAnoty(message) {
        var noty_id = noty({
            layout: 'center',
            text: message,
            modal: true,
            type: 'success',
        });
    }
    </script>

我使用razor v2作为C#的视图引擎,而web表单框架工作不是mvc。 提交表单后,我想调用上面的javascript函数。 这是我正在尝试做的一个例子;

   //place for c#
   if (IsPost)
   {
       //after submitting the form
       //I wanna somehow call the js to show noty message
       generateAnoty("You have successfully submitted the form!")
   }

P.S。如果我尝试通过使用任何html按钮onclick eventhandler调用generateAnoty(message)js方法,它可以很好地工作。

2 个答案:

答案 0 :(得分:0)

根据您提交表单的方式,您可以这样做..

@using (Ajax.BeginForm("Results", new AjaxOptions { UpdateTargetId="Results", OnBegin="ShowLoading", OnComplete="generateAnoty", OnFailure="Error" }))
{
   // Code here
}

注意:根据您在表单上的内容,您必须替换某些内容的名称。在这个例子中,我有一个函数,显示一个加载图像OnBegin和OnComplete你可以让它消失,或显示消息,无论你想要什么。只需更换你需要的东西就可以了。

答案 1 :(得分:0)

要添加将在您的框架中回发后运行的脚本,您可以使用ScriptManager.RegisterStartupScriptPage.ClientScriptManager.RegisterStartupScript方法。

如果您的网络表单在框架内使用UpdatePanel,则使用ScriptManager.RegisterStartupScript,否则使用Page.ClientScriptManager.RegisterStartupScript方法。

作为RegisterStartupScript的统一解决方案,您可以使用以下扩展方法:

public static void RegisterStartupScript(this Page page, string scriptText)
{
    var scriptManager = ScriptManager.GetCurrent(page);
    if (scriptManager != null && scriptManager.IsInAsyncPostBack)
        ScriptManager.RegisterStartupScript(page, page.GetType(), Guid.NewGuid().ToString(), scriptText, true);
    else
        page.ClientScript.RegisterStartupScript(page.GetType(), Guid.NewGuid().ToString(), scriptText, true);
}