質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

2回答

2092閲覧

ASP.NET MVC 5でテキスト内のURLをaタグに書き換えたい

widget11

総合スコア221

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2019/04/17 05:15

編集2019/04/17 06:11

Visuak Studio2017
ASP.NET MVC5
C# 6.0

例えば以下のように
string contents = "このサイトに飛んでください https://teratail.com/ ";
URLが書いてあるテキストがあるとして、これをWebページ上にテキストを表示するときにときに自動でテキスト内のURLをaタグに書き換えてたいのですが、
いまいち調べても方法が分かりませんでした。

public ActionResult Details(int? id) { string contents; var boards = DB.t_Boards.Find(id); contents = boards.Contents.Replace(Environment.NewLine, "<br />"); model = new DetailViewModel { Contents = contents } return View(model); }

のように変数contentsに当該するテキストが入っている場合
この変数boardsに対してどう処理を行い、viewに値を渡せばよいのでしょうか?
初歩的な質問かもしれませんが上手く解決できず迷っております。
よろしくお願い致します。

# 追記
ご返信ありがとうございます。
大変申し訳ございません。
そもそも当該するようなページが出てこず、コーディングして試すことが出来ていないという状態です。
https://www.ipentec.com/document/csharp-asp-net-using-hyperlink-control
であったりwebFormの記事は出てくるのですがMVC5での記事が出てきていないという状態で、そもそもの方法を掴めていない状態です。
どのようなアプローチをとればよいかお教え頂くと幸いです。

viewのコード、マークアップ

@model Db.Models.DetailViewModel @{ if (Model.Contents != null) { <td class=" col-md-10 col-lg-10"> @Html.Raw(Model.Contents) </td> } else if (Model.Contents== null) { <td class="">未記入 </td> } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/04/17 05:21

どのように調べてどのようなコードを試したのか質問に追記してください。 適切に調べられていればほぼそのまま使えるサンプルコードが見つかると思いますが、 調べ方、試し方が提示されていないとそれが適切かどうかの判断はできません。
widget11

2019/04/17 05:29

ご返信ありがとうございます。 大変申し訳ございません。 そもそも当該するようなページが出てこず、コーディングして試すことが出来ていないという状態です。 https://www.ipentec.com/document/csharp-asp-net-using-hyperlink-control であったりwebFormの記事は出てくるのですがMVC5での記事が出てきていないという状態で、そもそもの方法を掴めていない状態です。
m.ts10806

2019/04/17 05:30

質問を編集して追記してください
widget11

2019/04/17 05:59

編集致しました。
m.ts10806

2019/04/17 06:02

確認ですがその「変数contents」についてはビューに渡されてるんですよね?
widget11

2019/04/17 06:15

ご返信ありがとうございます。 そうです。一応編集して追記しましたが、一度DetailViewModelというviewmodelに突っ込んでviewにmodelごと渡しています。
guest

回答2

0

例えば以下のように
string contents = "このサイトに飛んでください https://teratail.com/ ";
URLが書いてあるテキストがあるとして、これをWebページ上にテキストを表示するときにときに自動でテキ> スト内のURLをaタグに書き換え

ブラウザに送信される時に以下のように html に変換されればいいのですか?

<a href="https://teratail.com/">このサイトに飛んでください</a>

であれば、文字列の操作はなるべくコントローラーで行うようにするのか良さそうなので、当該アクションメソッドで contents をリンクテキスト(このサイトに飛んでください)と URL(https://teratail.com/)に分け、それらを ViewBag に格納してビューに渡し、html の a タグを組み立てるようにしてはいかがですか?

テンプレートで自動生成される Home/Contact に具体例を追記すると以下のようになります。

アクションメソッド

public ActionResult Contact() { ViewBag.Message = "Your contact page."; ViewBag.LinkText = "このサイトに飛んでください"; ViewBag.Url = "https://teratail.com"; return View(); }

ビュー

@{ ViewBag.Title = "Contact"; } <h2>@ViewBag.Title.</h2> <h3>@ViewBag.Message</h3> <address> One Microsoft Way<br /> Redmond, WA 98052-6399<br /> <abbr title="Phone">P:</abbr> 425.555.0100 </address> <address> <strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br /> <strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a><br /> <strong>テラテイル:</strong> <a href="@ViewBag.Url">@ViewBag.LinkText</a> </address>

実行結果

イメージ説明

投稿2019/04/17 06:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

正規表現による文字列の置換処理になります。

C#

1string contents = "あああああああhttps://www.google.co.jp/いいいいいいいいい"; 2System.Console.WriteLine("置換前"); 3System.Console.WriteLine(contents); 4contents = System.Text.RegularExpressions.Regex.Replace( 5contents, 6@"s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+", 7"<a href=\"$&\">$&</a>"); 8System.Console.WriteLine("置換後"); 9System.Console.WriteLine(contents); 10 11/** 12置換前 13あああああああhttps://www.google.co.jp/いいいいいいいいい 14置換後 15あああああああ<a href="https://www.google.co.jp/">https://www.google.co.jp/</a>いいいいいいいいい 16**/

contentsという変数をビューに渡せているのでしたら置換したものを同名変数に上書きすればそのままいけると思います。
※ビュー側で置換が書けるかどうかは手元のすぐ動かせる環境がないのでわかりません。
paiza.ioで確認しました。

投稿2019/04/17 06:15

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

widget11

2019/04/17 07:21

ご回答ありがとうございます! 無事正規表現で置換することができました!
m.ts10806

2019/04/17 07:26

課題は調べ方、の方ですね。 キーワードを工夫してみると良いです。 解決されたようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問