ASP.NET MVC:_layout.cshtml中的逻辑,它接受来自给定控制器的变量

时间:2010-10-20 23:06:58

标签: c# visual-studio-2010 razor asp.net-mvc-3

MVC的新手如果术语稍微偏离,请原谅我。

我正在使用ASP.NET MVC3 beta和VS 2010。

我不确定这是概念,语法或什么的错误。

此时,我想做的是,对于_layout.cshtml,我想为其ActionResult将ViewModel.UseJQuery设置为true的任何Controller包含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. 如果是这样,我在哪里语法错误?
  3. 我确信这可能只是初学者的痛苦,但我环顾四周,一开始找不到解决方案(我订购了一本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();
        }
    

    编辑/更新:发现问题!

    D'哦!我意识到代码在设置变量时有效,但我一直试图尝试未设置的变量(这当然会导致传递空值而不是false)。

    所以,现在的问题是,我在_layout.cshtml中添加了哪些逻辑,允许我捕获空值并将其设置为false?

    我正在考虑以下几点:

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

    但是,有一些问题:

    • 是IsNull()正确的函数,还是我的语法错误? (在VS 2010中没有语法支持Razor会让我感到害怕,哈哈)
    • 如何在布局中本地设置UseJQuery变量?我怀疑View.UseJQuery是否有效,因为这是控制器设置的,对吧?

    无论如何,我试图设置上述值的错误是“Invalid expression term'='”,所以我相信ViewModel变量集合对于View可能是只读的吗?

    - 肖恩

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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()方法。

在您的视图页面中,您需要指定其强类型视图,期望类型为ViewModel的模型。

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

答案 2 :(得分:0)

在您的控制器中

定义:

ViewModel.UseJQuery

在您看来,您使用:

if(View.UseJQuery)