【发布时间】:2011-04-28 08:02:08
【问题描述】:
对 MVC 不熟悉,所以如果术语有点不对,请见谅。
我正在使用 ASP.NET MVC3 beta 和 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 标志)。
所以,我的问题有两个:
- 这是解决此问题的正确方法吗?
- 如果是这样,我在语法上哪里出错了?
我确定这可能只是初学者的痛苦,但我环顾四周,一开始找不到解决方案(我有一本 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)。
那么,现在的问题是,我应该在 _layout.cshtml 中添加什么逻辑,以允许我捕获 null 并将其设置为 false?
我的想法是这样的:
@if(View.UseJQuery.IsNull()){ @View.UseJQuery = false; }
但是,这里有一些问题:
- IsNull() 是正确的函数,还是我的语法错误? (在 VS 2010 中缺少对 Razor 的语法支持快要死了,哈哈)
- 如何在布局中本地设置 UseJQuery 变量?我怀疑 View.UseJQuery 会起作用,因为这是控制器设置的东西,对吧?
无论如何,我试图设置上述值的错误是“无效的表达式术语'='”,所以我相信 ViewModel 变量集合可能对 View 是只读的?
-- 肖恩
【问题讨论】:
标签: c# visual-studio-2010 razor asp.net-mvc-3