MVC は初めてなので、用語が少しずれている場合はご容赦ください。
ASP.NET MVC3 ベータ版と VS 2010 を使用しています。
これが概念の誤りなのか、構文の誤りなのか、それとも何なのかはわかりません。
基本的に、私がやりたいことは、_layout.cshtml に対して、ActionResult が ViewModel.UseJQuery を true に設定するコントローラーの jQuery スクリプトを含めたいということです。
私は物事に慣れていないので、間違っている可能性がありますが、これを行うための最良の方法(私が現在試みていること)は次のようになります。
_layout.cshtml ファイル:
@if(View.UseJQuery)
{
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>
<script type="text/javascript">
$(document).ready(function() {
// This is more like it! SHOULDN'T BE SEEN IF UseJQuery is false!
});
</script>
}
さまざまなコントローラーで
public ActionResult Index()
{
ViewModel.UseJQuery = false;
ViewModel.Title = "Image Gallery";
GalleryModel gm = new GalleryModel();
ViewModel.Testy = gm.TestString;
return View();
}
ただし、これにより、null をブール値に変換する必要があるというエラーが表示されます (UseJQuery フラグが見つからないと思います)。
だから、私の質問は2つあります:
- これは正しい方法ですか?
- もしそうなら、構文的にどこが間違っているのでしょうか?
これはおそらく初心者の苦痛に過ぎないと確信していますが、最初は解決策を見つけることができませんでした (ASP.NET MVC の本を注文しています -- 約束します!)
助けてくれてありがとう!
編集/更新:
これは、MVC 2 と 3 の間で異なる可能性があるものですか? たとえば、すぐに使用できる HomeController.cs の Index() ActionResult は次のとおりです。
public ActionResult Index()
{
ViewModel.Message = "Welcome to ASP.NET MVC!";
ViewModel.Title = "Home";
return View();
}
編集/更新: 問題が見つかりました!
ああ!変数が設定されているときにコードが機能することに気付きましたが、設定されていない変数を試してみました (もちろん、false ではなく null 値が渡されます)。
ここで問題になるのは、_layout.cshtml にどのようなロジックを配置すれば、null をキャプチャして代わりに false に設定できるようになるかということです。
私は次のようなことを考えています:
@if(View.UseJQuery.IsNull()){ @View.UseJQuery = false; }
ただし、これにはいくつかの問題があります。
- IsNull() は正しい関数ですか、それとも構文が間違っていますか? (VS 2010 での Razor の構文サポートの欠如は私を殺しています、笑)
- レイアウトで UseJQuery 変数をローカルに設定するにはどうすればよいですか? View.UseJQuery が機能するとは思えません。それはコントローラーが設定するものだからですよね?
いずれにせよ、上記の値を設定しようとしているエラーは「無効な式用語 '='」であるため、ViewModel 変数コレクションはビューに対して読み取り専用である可能性があると思いますか?
-- ショーン