コントローラー
ViewBag.title = "タイトルです-";
ViewBag.collections = collections;
return View("/Views/test.cshtml");
ビュー ( cshtml )
@foreach(var data in (@ViewBag.collections)) {
@data.name
}
</table>
ビュー ( cshtml )
@(User.Identity.IsAuthenticated ? "auth" : "anon")
Web.config
<system.web>
<customErrors defaultRedirect="~/Error/DefaultError.cshtml" mode="RemoteOnly">
<error statusCode="404" redirect="~/Error/NotFound" />
</customErrors>
mode="RemoteOnly"
にするとリモートでのみカスタムエラー画面が表示されます。
ローカルとリモート両方でカスタムエラー画面を表示させるには
mode="On"
とします。
引用 : https://www.wareko.jp/blog/post-21910
your-view-file.cshtml
@{
var baseUrl = ""
+ Request.Url.Scheme + "://"
+ Request.Url.Authority
+ Request.ApplicationPath.TrimEnd('/');
}
@baseUrl/controller/method
で
http://localhost:49983/controller/method
と表示されます。
コントローラーから ViewData で渡す場合は
YourController.cs
string BASE_URL = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd( '/' );
ViewData["BASE_URL"] = BASE_URL;
your-view-file.cshtml
@ViewData["BASE_URL"]/controller/method
で渡します。
Razorテンプレート内では @Request.ApplicationPath のように直接記述することができます。
<table>
<tr><td>Request.ApplicationPath</td><td>@Request.ApplicationPath</td></tr>
<tr><td>Request.FilePath</td><td>@Request.FilePath</td></tr>
<tr><td>Request.Path</td><td>@Request.Path</td></tr>
<tr><td>Request.FilePath</td><td>@Request.FilePath</td></tr>
<tr><td>Request.PathInfo</td><td>@Request.PathInfo</td></tr>
<tr><td>Request.PhysicalApplicationPath</td><td>@Request.PhysicalApplicationPath</td></tr>
<tr><td>Request.PhysicalPath</td><td>@Request.PhysicalPath</td></tr>
<tr><td>Request.RawUrl</td><td>@Request.RawUrl</td></tr>
<tr><td>Request.Url</td><td>@Request.Url</td></tr>
</table>
例えば
http://localhost:49983/Debug/Url
へのアクセスは
Request.ApplicationPath | / |
Request.FilePath | /Debug/Url |
Request.Path | /Debug/Url |
Request.FilePath | /Debug/Url |
Request.PathInfo | |
Request.PhysicalApplicationPath | C:\my_dir\MY-PROJECT\PROJECT\ |
Request.PhysicalPath | C:\my_dir\MY-PROJECT\PROJECT\Debug\Url |
Request.RawUrl | /Debug/Url |
Request.Url | http://localhost:49983/Debug/Url |
のような表示になります。
HogeController.cs
public IActionResult Fuga()
{
ViewData["Message"] = "メッセージの表示テストです";
return View();
}
Fuga.cshtml
<h2>@ViewData["Title"]</h2>
デバッグを実行してブラウザのアドレス欄に http://localhost:50914/Hoge/Fuga と入力して移動すると
<h2>メッセージの表示テストです</h2>
が出力されます。
「Input」で渡した値を「Confirm」で受け取ってみます
Input.cshtml (入力画面)
<form asp-controller="Hoge" asp-action="Confirm" method="post">
@Html.AntiForgeryToken()
<input type="text" name="Email" >
<input type="text" name="Url" >
<input type="submit" value="送信する">
</form>
HogeController.cs (確認画面 - コントローラ)
// POST: Hoge/Confirm
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Confirm(string Email, string Url)
{
ViewData["Email"] = Email;
ViewData["Url"] = Url;
return View();
}
Confirm.cshtml(確認画面 - ビュー)
<table>
<tr>
<td>Email</td>
<td>@ViewData["Email"]</td>
</tr>
<tr>
<td>Url</td>
<td>@ViewData["Url"]</td>
</tr>
</table>
(1.)と同じく「Input」で渡した値を「Confirm」で受け取ってみます。
この時モデルを定義してモデルを受け渡します。
Input.cshtml (入力画面)
<form asp-controller="Toukous" asp-action="Confirm" method="post">
@Html.AntiForgeryToken()
<input type="text" name="Email" >
<input type="text" name="Url" >
<input type="submit" value="送信する">
</form>
Models/Hoge.cs(モデル)
namespace Hoge.Models
{
public class Toukou
{
public int ID { get; set; }
public string Email { get; set; }
public string Url { get; set; }
}
}
HogeController.cs (確認画面 - コントローラ) view()の引数で「テンプレートファイル」「モデル」を渡しています
// POST: Hoge/Confirm
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Confirm(Toukou model)
{
return View("Confirm", model);
}
Confirm.cshtml(確認画面 - ビュー) テンプレート cshtml の一番上でモデルのクラスを指定します。
@model <プロジェクト名>.Models.<モデルのクラス名>
例
@model Myapp.Models.Entry
<table>
<tr>
<th>@Html.DisplayNameFor(model => model.Email)</th>
<td>@Html.DisplayFor(model => model.Email)</td>
</tr>
<tr>
<th>@Html.DisplayNameFor(model => model.Url)</th>
<td>@Html.DisplayFor(model => model.Url)</td>
</tr>
</table>
デフォルトではレイアウト(継承元)のテンプレートファイルは
Views/Shared/_Layout.cshtml
にあります。
これは /Views/_ViewStart.cshtml に次のように定義されているので
@{
Layout = "_Layout";
}
レイアウトファイルを変えたい場合はここを変更します。
レイアウトを使用しない場合は null をセットします。
チルダ ~ でドキュメントルートを参照できます。
<img src="~/Content/hoge.gif" alt="サンプル画像" />