簡體   English   中英

有沒有辦法從C#調用/運行JavaScript?

[英]Is there a way to call/run JavaScript from C#?

我有一個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檢測“提交”按鈕上的click事件並運行我的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個按鈕,“插入”是“提交”按鈕,因此我將其稱為“提交”按鈕。

謝謝,
里斯托

請參閱常見問題解答:

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編程。

是。 您應該使用RegisterStartupScript

這樣的代碼應該可以在您的Click處理程序上運行:

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

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

上面的代碼執行完后,您的后台代碼將繼續執行,將控件“傳遞給C#”,如您所願。

除了函數調用,您還可以使用此函數注冊它們,只需傳遞函數定義而不是調用它。

正如您提到的那樣,您將需要使用RegisterClientScriptBlock或ajax,例如:ScriptManager.RegisterStartupScript(this,this.GetType(),“ MyFunc”,“ MyFunc();”,true);

聽起來您不希望單擊“提交”按鈕來觸發服務器端請求,而希望在客戶端上進行處理。 在這種情況下,將您的提交按鈕替換為常規按鈕,然后將onclick事件綁定到JavaScript代碼。

這是你怎么做

document.myform.mybutton.onclick(function(){//此處是您的代碼});

如果您使用jQuery,則可以通過“提交”按鈕簡單地捕獲表單提交,如下所示:

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

“返回真實”; 將強制表單提交。 如果返回false(驗證失敗或其他原因),則不會提交表單。

例如:

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

我不確定這是否是您想要的,但是我之前已經使用過。

我正在使用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;
        });
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM