2

asp.net Webサイトで作業しています。c#を使用してhtml内の特定の文字列を置き換える必要があります。以下はhtmlです。ここでは、c#コードを使用して「@name」を有効な名前に置き換える必要があります。javaスクリプトを使用してみました。動作しています。c#を使用してこれを実現するにはどうすればよいですか?

解析するためにc#またはHtmlAgilityPackを使用して現在のページのHTMLを取得するにはどうすればよいですか?

HTML:

<div>
In the @name, you may have configured an iPad in both the AppleDevices and the TabletDevices configuration. However, because AppleDevices may have been set for a small display size, you want an iPad to use the TableDevices configuration (which has a larger screen). Reorder the devices in the following order so that an iPad will use the TableDevices configuration first.
Tablet Devices
Apple Devices
</div>
4

5 に答える 5

3
var result = html.Replace("@name", valid_name)
于 2012-07-12T12:39:35.060 に答える
3

最も簡単な方法は、String.Replace(String, String)メソッドを使用することです。

string newString = html.Replace("@name", "valid name");
于 2012-07-12T12:40:12.370 に答える
2

これが MVC であると仮定して、私のCsQueryプロジェクトを見てください。CsQuery は、HTML を直接操作するために使用できる jQuery ポートおよび CSS セレクター エンジンです。しかし、もっと重要なことは、プロジェクトには、MVC の下で C# でレンダリングする前に、ページの HTML にアクセスするためのコードの例が含まれていることです。

部分ビューへのアクセスは非常に簡単です。この件に関する Rick Strahl のブログ投稿を参照してください。

ただし、ページの HTML 全体にアクセスし、レンダリング前に変更する可能性がある場合は、カスタム を作成しViewEngine、HTML にアクセスできるコントローラーへのコールバックを作成する必要があります。これを正しく行うにはかなりの作業が必要です。何百行ものコードをコピーするのではなく、CsQuery に含まれている MVC アプリの例、特にCsQueryViewフォルダー内のクラスを見てください。

https://github.com/jamietre/CsQuery/tree/master/examples/CsQuery.MvcApp

これには、カスタム ビュー エンジンと、次のようにコントローラーにメソッドを追加できるカスタム コントローラー基本クラスが含まれます。

// runs for all actions
public void Cq_Start()
{
    Doc["a.not-allowed"]
        .Attr("onclick","javascript:alert('You're not authorized to click this')");
}

// runs for the Index action
public void Cq_Index()
    Doc["div"].Css("border", "1px solid red;");
}

これらのメソッドは、対応する通常のアクション メソッドのDocに呼び出され、 の値を設定します。オブジェクト (CsQuery のコア オブジェクト) ですDocCQこれには、ページのすべての HTML が含まれます。jQuery オブジェクトのようなものです。あなたの状況では、次のような jQuery メソッドを使用できます。

// select all divs on the page
var div = Doc["div"];

// do parameter substitution
var newText = div.Text().Replace("@name", valid_name);

// update the text
div.Text(newText);

このビュー エンジンを使用するように MVC アプリを切り替えるには、次のコードを に追加する必要がありますApplication_Start

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CsQueryViewEngine());

ただし、CsQuery を使用したくない場合は、レンダリング前に MVC で HTML 出力にアクセスする方法を例で示します。リフレクションを使用して、コントローラーでコールバックするメソッドを見つけ出し、CsQuery オブジェクトの代わりに HTML の文字列を提供するように簡単に適応させることができます。

于 2012-07-12T14:38:03.127 に答える
1
string htmlContent=@"<div>In the @name, you may have configured an iPad in both the AppleDevices and the TabletDevices configuration. However, because AppleDevices may have been set for a small display size, you want an iPad to use the TableDevices configuration (which has a larger screen). Reorder the devices in the following order so that an iPad will use the TableDevices configuration first.
Tablet Devices
Apple Devices
</div>";
string htmlNewContent=htmlContent.Replace("@name",valid_name);
于 2012-07-12T13:21:05.353 に答える
0

この置換だけの場合は、string.Replace(); を使用できます。

あなたのコードはhtml teplateのようです。変数のリストが大きくなる場合は、Razor をテンプレート エンジンとして使用することを強くお勧めします。これにより、静的型付け、HTML テーブルでのインテリセンス、およびその他の機能を取得できます。

于 2012-07-12T12:45:02.703 に答える