これはかなり基本的なことのように思えますし、そうあるべきですが、どこが間違っているのかわかりません。(私はSOで同様のタイトルを持つ他の記事、およびWeb上の他のリソースを読んだことがありますが、それでも理解できません)。
私はコントローラーを持っていて、その中に文字列変数を設定しています。これがプロパティ、ActionResult、またはストレートメソッドのいずれの形式をとってもかまいません。コントローラで操作できる単純な文字列が必要で、それをビューに戻します。
基本的に私がやろうとしているのは、特定のフォルダー内のファイルを一覧表示することです。したがって、私のロジックは次のようになります。
- 現在のフォルダを検索します(部分的に成功しました)
配置するファイルがある場所へのパスを追加します。つまり、現在のフォルダがWeb \の場合、たとえばすべてのCSSファイルを一覧表示する場合は、「Content\CSS」のようなものを追加します。(これは、ユーザーが適用するcssを選択してサイトを動的に変更できるようにするためです)。したがって、次のようになります。
CurrentPath + = "Content \ CSS"
ファイル名を配列またはリストにロードしたい
- このリストをビューに渡して、コンボボックス(_Layout.cshtmlにあります)でレンダリングしたいと思います。
別のビューを作成することはできないため、_Layout.cshtmlで文字列を表示しようとしていることを知っておくことが重要です。(私が間違っていない限り、その場合は助けを感謝します)。
現時点では、手順2のように自由に操作できる方法で、単純な文字列をビューに渡す作業を続けています。
私は別の静的クラスとグローバル変数から始めました:
public static class MyTheme
{
public static string CurrentPath = HostingEnvironment.MapPath("~");
}
私の見解では、次のようになりました。@ Html.Label(MyProject.Web.Controllers.MyTheme.CurrentPath);
これは機能しましたが、ifステートメントを使用して文字列がnullか空かを判断しようとすると、エラーが発生しました。だから私の次の試みはすべて失敗しました。
次に、それをコントローラー(この場合はBaseController)に取り込むことにしました。これは、問題が発生し始めたときです。以下のコード:
BaseControllerクラスの内部
public ActionResult ThemePath()
{
string currentPath = Server.MapPath("~");
if (string.IsNullOrEmpty(currentPath))
{
currentPath = "Error!";
}
else
{
currentPath = "Our Path Is: " + currentPath;
}
return View(currentPath);
}
_Layout.cshtmlビュー内からこれにアクセスして実行する方法がわかりません
そこで次に、BaseController内の標準メソッドを試しました。
public string ThemePath()
{
string currentPath = Server.MapPath("~");
if (string.IsNullOrEmpty(currentPath))
{
currentPath = "Error!";
}
else
{
currentPath = "Our Path Is: " + currentPath;
}
return currentPath;
}
繰り返しますが、ビューでアクセスする方法がわかりません
最後に、ViewBagとViewDataを使用しようとしましたが、今はおかしくなりそうです。だから私のベースコントローラーには:
public string ThemePath()
{
ViewBag.currentPath = Server.MapPath("~");
if (string.IsNullOrEmpty(ViewBag.currentPath))
{
ViewBag.currentPath = "Error!";
}
else
{
ViewBag.currentPath = "Our Path Is: " + ViewBag.currentPath;
}
return ViewBag.currentPath;
}
そして私の見解では私は
@Html.Label(ViewBag.CurrentPath);
あるいは
@Html.Label(ViewBag.CurrentPath.ToString());
次のわかりやすい小さなエラーメッセージが表示されます。
CS1973:「System.Web.Mvc.HtmlHelper」には「Label」という名前の適用可能なメソッドがありませんが、その名前の拡張メソッドがあるようです。拡張メソッドを動的にディスパッチすることはできません。動的引数をキャストするか、拡張メソッド構文なしで拡張メソッドを呼び出すことを検討してください。
最後に、ベースでViewDataを次のように試しました。publicstring ThemePath(){ViewData ["currentPath"] = Server.MapPath( "〜");
if (string.IsNullOrEmpty(ViewData["currentPath)"].ToString()))
{
ViewData["currentPath"] = "Error!";
}
else
{
ViewData["currentPath"] = "Our Path Is: " + ViewData["currentPath"];
}
return ViewData["currentPath"].ToString();
}
それに対応して、私が試した_Layout.cshtmlで:
@Html.Label(ViewData["CurrentPath"].ToString());
.ToString()がないと、上記のエラーが発生します。
.ToString()を使用すると、null参照実行エラーが発生します。
だから私は今ちょっと迷っていて、どこが間違っているのか本当にわかりません。助けてくれてありがとう。