有没有办法从C#调用/运行JavaScript?

时间:2010-12-16 19:05:54

标签: c# javascript asp.net

我有一个C#函数,我想在其中调用/运行一些JavaScript:

protected void DetailsView1_DataBound(object sender, EventArgs e) {
   ...
   // call/run JavaScript
   ...
}

我正在处理表单,特别是提交表单。点击“提交”后,会运行几个C#函数来处理验证和其他杂项任务。完成这些操作后,我需要运行一些JavaScript,但是我无法同步这些事件。 JavaScript是:

...
if (uploader.total.uploaded == 0) {
   if (uploader.files.length > 0) {
      uploader.start();
   }
   e.preventDefault();
}
...

我尝试这样做的方法是通过jQuery检测“提交”按钮上的点击事件并运行我的Javascript,但表单本身不提交。我尝试过这种变化,但我没有运气。

那我怎么做到这一点? “RegisterClientScript”是我应该研究的东西吗?如果是这样,可能的解决方案是在PageLoad上注册JavaScript并将其附加到Submit按钮吗?如果是这样,我将如何在代码中执行此操作?

如果我需要进一步澄清我的问题,请告诉我。

更新

稍微澄清......此页面上的表单是通过按钮提交的:

<asp:CommandField ValidationGroup="request" ButtonType="Image" 
        CancelText="Reset" CancelImageUrl="../images/internal/btn_reset.gif"
        InsertImageUrl="../images/internal/btn_insert.gif" ShowEditButton="True" 
        ShowInsertButton="True" />

这会创建2个按钮,Insert是Submission按钮,所以我将其称为Submit按钮。

谢谢,
赫里斯托斯

7 个答案:

答案 0 :(得分:1)

请参阅常见问题解答:

http://forums.asp.net/t/1360420.aspx#_How_to_register

private void Button2_Click(object sender, System.EventArgs e)
{
    string str;
    str="<script language='JavaScript'>";   
    str+="selectRange()";
    str+="<script>";
    Literal1.Text=str;
}

ASP.NET WebForms的主要缺点是你必须购买WebForm模型 - 这是C#中的所有逻辑,让WebForms为你处理JavaScript。这就是为什么你不得不求助于FAQ告诉你的扭曲。 WebForms旨在使您的Web应用程序像桌面应用程序一样实现 - 并且总是运行得不好。

ASP.NET MVC的主要优点是您可以完全控制标记,JavaScript等。当然,缺点是您无法访问使用WebForms的所有丰富内容控件。但是,MVC在大多数其他平台上更好地匹配Web编程。

答案 1 :(得分:1)

是。您应该使用RegisterStartupScript

这样的代码应该适用于Click处理程序:

ClientScriptManager scriptManager = Page.ClientScript;
Type type = this.GetType();
string script = "<script type=text/javascript> callMyFunction(); </script>";

scriptManager.RegisterStartupScript(type, "MyName", script);

在上面的代码执行之后,您的代码隐藏将继续执行,“将控制权”传递给C#,如您所愿。

除了函数调用之外,您还可以使用它来注册它们,只需传递函数定义而不是调用它。

答案 2 :(得分:0)

听起来您不希望单击提交按钮来触发服务器端请求,而是要在客户端上进行处理。在这种情况下,请使用常规按钮替换提交按钮,并将onclick事件与JavaScript代码绑定。

以下是你如何做到这一点

document.myform.mybutton.onclick(function(){//您的代码在这里});

答案 3 :(得分:0)

如果您使用jQuery,您只需从“提交”按钮中捕获表单提交,如下所示:

$("form").submit(function() {//do something, return true;}

“归来真实”;将强制表单提交。如果您返回false(验证失败或某些内容),表单将不会提交。

答案 4 :(得分:0)

一个例子可能是:

protected void DetailsView1_DataBound(object sender, EventArgs e)
{
    ...
    // Example JavaScript
    Response.Write("<script language='javascript'> { window.close();}</script>");
    ...
}

我不完全确定这是否是你想要的,但我以前用过它。

答案 5 :(得分:0)

我正在使用jquery将表单提交给控制器..

这是我使用的代码..如果您有任何问题,请告诉我。

 $(function () {
        $('#form2').submit(function () {
            if ($("#txtServiceTypeCategoryName").val() == "") {
                alert("Please Enter Service Type Category Name");
                return false;
            }
            if ($("#txtServiceTypeCategoryDescription").val() == "") {
                alert("Please Enter Service Type Category Description");
                return false;
            }
            $('#someHiddenDiv1').show();
            $('#CCSave').attr('disabled', 'disabled');
            $('#btnExist').attr('disabled', 'disabled');
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (result) {
                    $('#someHiddenDiv1').hide();
                    $('#CCSave').removeAttr('disabled');
                    $('#btnExist').removeAttr('disabled');
                    window.location.href = '/ServiceTypeCategory/edit/' + $("#txtServiceTypeCategoryID").val();                  
                    //alert('ServiceTypeCategoryChanges Made Successfully!');
                }
            });
            return false;
        });
    });

答案 6 :(得分:0)

如你所说,你想要使用RegisterClientScriptBlock或者像这样的ajax: ScriptManager.RegisterStartupScript(this,this.GetType(),“MyFunc”,“MyFunc();”,true);