1

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 标志)。

所以,我的问题有两个:

  1. 这是解决这个问题的正确方法吗?
  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)。

所以,现在的问题是,我在 _layout.cshtml 中放置了什么逻辑,可以让我捕获 null 并将其设置为 false 呢?

我在想一些事情:

@if(View.UseJQuery.IsNull()){ @View.UseJQuery = false; }

但是,这有一些问题:

  • IsNull() 是正确的函数,还是我的语法错误?(在 VS 2010 中缺少对 Razor 的语法支持让我很生气,哈哈)
  • 如何在布局中本地设置 UseJQuery 变量?我怀疑 View.UseJQuery 会起作用,因为这是控制器设置的,对吧?

无论如何,我试图设置上述值的错误是“无效的表达式术语'='”,所以我相信 ViewModel 变量集合可能对 View 是只读的?

——肖恩

4

3 回答 3

1

您似乎没有将模型传递给视图。是否_layout.cshtml设置为期望ViewModel对象的强类型视图?

于 2010-10-20T23:13:57.530 回答
1

通常我希望看到类似的东西:

public ActionResult Index()
{
    GalleryModel gm = new GalleryModel();

    var model = new ViewModel {
        UseJQuery = false,
        Title = "Image Gallery",
        Testy = gm.TestString            
    };

    return View(model);
}

查看您的代码,ViewModel大写 V 是类还是对象?无论哪种方式,重要的一点是将它传递给View()方法。

在您的视图页面中,您需要指定它是一个强类型视图,需要一个 type 的模型ViewModel

通常你会继承自System.Web.Mvc.ViewPage<T>

于 2010-10-20T23:18:45.433 回答
0

在您的控制器中定义:

ViewModel.UseJQuery

但在您看来,您使用:

if(View.UseJQuery)
于 2010-10-22T12:50:11.637 回答