0

私はC#を使用してASP.Netプロジェクトに取り組んでいます。

通常、いくつかのメソッドを実行するボタンを配置する必要がある場合は、ASP コントローラー (ボタン) をrunat="server"フォーム内で使用します。

しかし、これが私の Web サイトの機能を本当に制限していると感じています。なぜなら、以前JSPを使用していたときは、 jqueryを使用してサーブレットに到達し、いくつかのコードを実行してresponseTextを返したからです。

これが ASP.Net でどのように行われるかはまだ確認していませんが、私の質問はコントローラーと有名なrunat="server"に関するものです。

runat="server"を任意のHTML Elementに追加すると、この HTML 要素を C# (サーバー側) で操作できるはずですが、これは実際に機能します。 IDを変更し、 InnerTextまたはInnerHtmlを設定できます。 、しかし、私が得られないのは、なぜこの要素をクリックしてメソッドを実行できないのですか?

onclick」属性は JavaScript 用だと思いますが、OnServerClickも同様に機能しないようです。私のコードに何か問題がありますか?またはこれはまったく機能しませんか?

4

6 に答える 6

2

divを使用してクリックを処理し、Jquery サーバー側のメソッドを呼び出す必要があります。JQuery

于 2012-12-28T12:01:02.270 に答える
1

ページ上の div または何かをクリックして、サーバー側のメソッドを実行する方法はいくつかあります。1 つ目は __dopostback と呼ばれ、2 つ目は JavaScript または jQuery でクリックを処理し、ハンドラーで関数を呼び出したり、Web サービスでページ メソッドを呼び出したり、ページ ビハインド コードでページ メソッドを呼び出したりします。ハンドラーのバージョンは次のとおりです。

 $("#btn1").click(function() {
    $.ajax({
            url: '/Handler1.ashx?param1=someparam',
            success: function(msg, status, xhr) {
                //doSomething, manipulate your html
            },
            error: function() {  
             //doSomething
            }
        });
 });

更新パネルなしで部分的なポストバックを非同期で作成できるため、2 番目のバージョンの方が優れていると思います。欠点は、サーバー側のコードがページ ビハインド コードから分離されていることです。

ハンドラ:

public class Handler1: IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
      context.Response.ContentType = "application/json";
      var param1= context.Request.QueryString["param1"];
      //param1 value will be "someparam"

      // do something cool like filling a datatable serialize it with newtonsoft jsonconvert

      var dt= new DataTable();
      // fill it
      context.Response.Write(JsonConvert.SerializeObject(dt));
   }
}

すべて問題がなければ、成功セクションの ajax 呼び出しで応答が返され、"msg" というパラメーターがシリアル化された JSON データテーブルになります。

于 2012-12-28T12:17:24.480 に答える
1

div onclickのjqueryにこのコードを追加し、クリックを呼び出すDIv idを渡します

__doPostBack('__Page', DivID);

ページの読み込み時にこのコードを追加します

if (IsPostBack)
            {
    //you will get id of div which called function
    string eventargs = Request["__EVENTARGUMENT"];

                    if (!string.IsNullOrEmpty(eventargs))
                    {
                       //call your function 
                    }
}
于 2012-12-28T12:20:39.717 に答える
1

__doPostBack JavaScript 関数を使用して、サーバーで jquery クリックからメソッドを実行できます。詳細については、この脅威を参照してください__doPostBack() の使用方法

于 2012-12-28T12:04:17.043 に答える
1

div を runat="server" および id="divName" にします。

csのpage_Loadイベントで:

if (IsPostBack)
{
if (Request["__EVENTARGUMENT"] != null && Request["__EVENTARGUMENT"] == "divClick")
{
    //code to run in click event of divName
}
}

divName.Attributes.Add("ondivClick", ClientScript.GetPostBackEventReference(divName, "divClick"));

それが役に立てば幸い :)

于 2012-12-28T12:37:24.850 に答える
-1

runat="server" 属性を持つ div を参照している場合、それらには onserverclick イベントがないため、機能しません。

于 2012-12-28T12:01:37.747 に答える