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

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

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

3778閲覧

Razorで複数のHTMLヘルパーの機能を合体させる方法

pomu.pomupomu

総合スコア18

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

C#

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2018/08/21 09:45

編集2018/09/30 05:27

前提・実現したいこと

ASP.NET mvc5 で掲示板を作成している初学者です。
掲示板の2ch等でいうスレッドタイトルを表示し、スレッドタイトルをクリックするとそこからクリックしたスレッド一覧へ飛ぶ方法を実現しようと思っていたところ、Razorの記述方法について自力で解決できない問題が生じたため投稿しました。もしよろしければ回答をいただけるとありがたいです。
(参考書やネットで見つけられないため初歩的すぎるのではないかと危惧してます。初歩的すぎて癇に障りましたら申しわけありません。)

次の画像を例にすると、現在は左上の方にある"Thread"をクリックすると1番目から順に"Viewの書き換え"等のスレッドタイトルが含むスレッド一覧へ遷移します。しかし、そうではなく、"Viewの書き換え"そのものをクリックしてスレッド一覧へいけないか、という感じです。

発生している問題・エラーメッセージ

見にくいかもしれないのですが、下記のソースコード中のHtmlについて赤の波線がつき、添付画像のようにActionLinkの定義が含まれていない、と警告されます。
(同じファイル中でもmodelItem => item.Idの部分を"Thread"等に修正するとただのActionLinkとしてはつかえます。)

C#

1<td class="bbs_title">@Html.ActionLink(modelItem => item.Id, "Index", new { controller = "Responses", id = item.Id })</td>

該当のソースコードと試したこと

必要だと思われる場所だけ切り抜きしています。

次の2行を組み合わせて

C#

1<td class="bbs_title">@Html.DisplayFor(modelItem => item.Title)</td> 2@Html.ActionLink("Thread", "Index", new { controller = "Responses", id = item.Id })

このようにすればいいのではないかと考えましたが、うまくいきませんでした。

c#

1<td class="bbs_title">@Html.ActionLink(modelItem => item.Title, "Index", new { controller = "Responses", id = item.Id })</td>

C#

1 <table border="0"> 2 <tr class="note clearfix"> 3 <th>NO.</th> 4 <th>タイトル</th> 5 <th>レス数</th> 6 <th>HN</th> 7 <th colspan="1">最終コメント日時</th> 8 <th>カテゴリー</th> 9 <th>地域</th> 10 <th>閲覧数</th> 11 </tr><!--/.note--> 12 @foreach (var item in Model) 13 { 14 <tr class="bbs_line clearfix"> 15 <td class="bbs_number">@Html.DisplayFor(modelItem => item.Id)</td> 16 17 <td class="bbs_title">@Html.ActionLink(modelItem => item.Id, "Index", new { controller = "Responses", id = item.Id })</td> 18 19 <td class="bbs_comment_count">@Html.DisplayFor(modelItem => item.ResponseCount)</td> 20 <td class="bbs_name">@Html.DisplayFor(modelItem => item.AspNetUsers.HandleName)</td> 21 <td class="bbs_date">@Html.DisplayFor(modelItem => item.RecentResDate)</td> 22 <td class="bbs_category">@Html.DisplayFor(modelItem => item.Categories.Name)</td> 23 <td class="bbs_region">@Html.DisplayFor(modelItem => item.Regions.Name)</td> 24 <td class="bbs_reading_count">@Html.DisplayFor(modelItem => item.ViewCount)</td> 25 26 </tr> 27 } 28 </table>

補足情報(FW/ツールのバージョンなど)

VS2017 Windows7 .Net Framework 4.6.1 MVC5

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

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

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

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

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

guest

回答1

0

ベストアンサー

同じファイル中でもmodelItem => item.Idの部分を"Thread"等に修正するとただのActionLinkとしてはつかえます。

<td class="bbs_title">@Html.ActionLink(modelItem => item.Id, "Index", new { controller = "Responses", id = item.Id })</td>

その意味は、上のコードを以下のよう変更にすれば、

@Html.ActionLink("Thread", "Index", new { controller = "Responses", id = item.Id })

アクションリンクのテキストは全て Thread となってしまうが、それ以外は問題なく、クリックすれば期待通りの動きになる、すなわち、

1番目から順に"Viewの書き換え"等のスレッドタイトルが含むスレッド一覧へ遷移します。

となると理解して良いですか? (第 2 引数の "Index" とか、違うような気がしますけど、とりあえずそれは置いときます)

そして、やりたいことは、上記ではアクションリンクのテキストが全部 Thread となってしまうところを Model の Title にしたいということですよね?

であれば、以下のようにしてみてください。

@Html.ActionLink(item.Title, "Index", new { controller = "Responses", id = item.Id })

**【注】**Html.ActionLink は @foreach (var item in Model) のループ内にあると理解しています。違う場合はどう違うか連絡ください。

投稿2018/08/22 01:41

編集2018/08/22 01:47
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pomu.pomupomu

2018/08/22 07:20

回答ありがとうございます! 教えの通りに記したところ、望む通りの結果が返ってきました。ありがとうございます。Item.id等の扱いに言う用を聞かせる方法がわかり、とてもありがたかったです。 (今更ですが質問文読み返すと意味のわからりにくいものになってい多ことに気がつきました。すみません。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問