2

サーバーへの ajax 呼び出し (jQuery を使用) を行うメイン Web ページ (「ベース ページ」) があります。サーバー側のページ (「Ajax ページ」) は ASP.NET Web フォームです (ここでは MVC は使用されていません)。(この場合) GridView を使用して ajax 応答内のデータをレンダリングしているため、<form runat="server"> タグを含める必要があります。

私の不満は、ベース ページが AJAX 応答を受け取ると、それを DOM に挿入することですが、AJAX 応答は <form> タグを含む HTML マークアップで構成されているため、ネストされた html フォームになることがあります。悪い。

jquery を使用して応答のフラグメントを Base Page DOM に挿入するだけでよいこと、または jquery を使用して問題のある <form> タグを後で削除できることを認識しています。しかし、これらは扱いにくい回避策のように感じます。ASP.NET ページが <form> タグを使用して応答を提供するのを防ぐ方法は本当にないのでしょうか? フォーム タグが ASP.NET Web フォーム モデルの心臓部であることは理解していますが、ASP.NET で AJAX を使用することは確かに複雑です。マイクロソフトは、ポストバック/サーバー側モデルが過去のものであることに気付いたのでしょうか?

Microsoft には、おそらくこの問題に対処するサーバー側の AJAX ライブラリがいくつかあることも認識していますが、ASP.NET Web フォームにネイティブなソリューションがあるかどうかを知りたいです。

助言がありますか?

4

4 に答える 4

3

GridView を Web ユーザー コントロールに追加し、次のような文字列にレンダリングできます。

public static string ExecuteToString(this Control control)
{
    Page page = new Page();
    page.Controls.Add(control);

    StringBuilder sb = new StringBuilder();
    using (StringWriter writer = new StringWriter(sb))
    {
        HttpContext.Current.Server.Execute(page, writer, false);
    }
    return sb.ToString();
}

これは、ajax リクエストをページに向ける必要がないことを意味します。Web サービスを利用できます。特定のメソッドを照会し、ユーザー コントロールを動的にロードして文字列にレンダリングし、HTML を返します。HTML とコードをユーザー コントロールに配置するため、フォーム タグを取り除くことを心配する必要はなく、ページ上で行う場合と同様にすべての asp コントロールを引き続き使用できます。

この方法を使用した場合のパフォーマンス コストについてはわかりませんが、しばらく使用していて、問題ないように思えます。

于 2012-04-20T10:52:13.103 に答える
3

長年にわたって WebForms と AJAX を使用してきたあなたの不満は理解できます。

通常、jQuery AJAX を使用して WebForm ページをロードする場合ajax、フォーム内にネストされたクラスをページにラップします。

<html>
   <head></head>
   <body>
      <form runat="server">
         <div class="ajax">
            Content here..
         </div>
      </form>
   </body>
</html>

次に、ページをロードするときに、このajaxクラスだけを呼び出します。

$("element").load("http://domain.com/webpage.aspx .ajax");

これは、form要素がページにレンダリングされないことを意味し、ネストされたフォームの問題を防ぎますGridViewが、それでも HTML に正常にレンダリングできます。

于 2012-04-19T16:26:53.923 に答える
0

ajax サーバー ページが aspx ページ (例: ajaxpage.aspx) である場合、Page ディレクティブに言及している最初の行を除いて、ajaxpage.aspx の HTML マークアップを削除できます。だから、それはこのようなものでなければなりません。

<%@ Page Language="C#" CodeBehind="ajaxpage.aspx.cs" Inherits="MyProject.ajaxpage" %>

コード ビハインドでは、response.Write を使用してデータを返すことができます。

protected void Page_Load(object sender, EventArgs e)
{
   Response.Write("your markup to return here");
}

ある種の(クリーンな)HTMLマークアップ/データの一部を返す場合、aspxファイルの代わりにgeneric handler(例:)ファイルを使用して、そこからデータを返す傾向がありますajaxresponse.ashx

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";
    context.Response.Write("<h3>Here is the Markup for UserDetails</h3>");
}

ashx ファイルで ASP.NET サーバー コントロールを使用することはできません。また、フォーム タグなしでサーバー コントロール (例: GridView ) を持つページを作成することはできません。form タグ内に配置する必要があります。gridview などのサーバー コントロールは、HTML テーブル マークアップのみをレンダリングすることに注意してください。

個人的には、ajax を使用して現在のページに表示/挿入したいクリーンで制御された HTML マークアップを取得したい場合は、ashx ハンドラーを使用し、コードを記述して必要なマークアップを出力します。ASHX ファイルは、通常の ASPX ページのライフ サイクル (すべてのイベント) を通過しないため、aspx ファイルと比較してパフォーマンス上の利点があります。

于 2012-04-19T16:28:13.113 に答える