Впервые в MVC, так что прости меня, если терминология немного не в порядке.
Я использую ASP.NET MVC3 beta и VS 2010.
Я не уверен, является ли это ошибкой концепции, синтаксиса или чего-то еще.
По сути, я хотел бы, чтобы для _layout.cshtml я хотел включить скрипт jQuery для любого контроллера, чей ActionResult устанавливает для ViewModel.UseJQuery значение true.
Я новичок в этом деле, поэтому могу ошибаться, но мне кажется, что лучший способ сделать это (то, что я сейчас пытаюсь) будет:
_layout.cshtml file :
@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();
}
Однако, это дает мне ошибку о необходимости преобразования нулевого значения в логическое значение (я полагаю, что он не находит флаг UseJQuery).
Итак, мой вопрос двоякий:
- Это правильный путь?
- Если так, то где я ошибаюсь синтаксически?
Я уверен, что это, вероятно, только начинающая боль, но я оглянулся вокруг и сначала не мог найти решение (у меня книга ASP.NET MVC на заказ - обещаю!)
Заранее спасибо за любую помощь!
Редактировать / Update:
Может ли это быть чем-то отличным между MVC 2 и 3? Например, из коробки, ActionResult Index () для HomeController.cs:
public ActionResult Index()
{
ViewModel.Message = "Welcome to ASP.NET MVC!";
ViewModel.Title = "Home";
return View();
}
РЕДАКТИРОВАТЬ / ОБНОВИТЬ: Проблема найдена!
D'Oh! Я понял, что код работает, когда переменная установлена, но я пытался поэкспериментировать с неустановленной переменной (что, конечно, приводит к передаче нулевого значения вместо ложного).
Итак, теперь вопрос в том, какую логику я добавлю в _layout.cshtml, который позволит мне захватить ноль и установить вместо него значение false?
Я думаю что-то вроде:
@if(View.UseJQuery.IsNull()){ @View.UseJQuery = false; }
Однако есть несколько проблем с этим:
- IsNull () - правильная функция или мой синтаксис неверен? (отсутствие синтаксической поддержки Razor в VS 2010 убивает меня, хаха)
- Как установить переменную UseJQuery локально в макете? Я сомневаюсь, что View.UseJQuery будет работать, потому что это то, что устанавливает контроллер, верно?
Во всяком случае, я получаю сообщение об ошибке при попытке установить указанное выше значение «Недопустимый термин выражения '='», поэтому я считаю, что коллекция переменных ViewModel может быть доступна только для чтения представлению?
-
Шон