Вызов и временное хранение и объект в пределах MVC View - PullRequest
0 голосов
/ 30 марта 2011

Я все еще изучаю движок Razor ASP.NET MVC3 и пытаюсь понять, как сделать что-то, что кажется невероятно простым .

У меня есть статический класс, который инкапсулирует метод, который вызывает сторонний API.Моя _Layout.cshtml главная страница вызывает статический класс, например,

if(@Rf.Models.PageContent.GetSomething().IsSomethingHappening) {
   <span>@Rf.Models.PageContent.GetSomething().Name</span>
}

Как вы видите, я дублирую усилия (и вызываю сторонний API) из моего статического класса PageContent., метод GetSomething - который возвращает класс.

В обычном старом MVC2 я бы сделал что-то вроде этого:

<% var obj = Rf.Models.PageContent.GetSomething();
   if(obj.IsSomethingHappening) { %>
   <span><%=obj.Name%></span>
<% } %>

..., который не дублирует усилия.

Я хочу вызвать PageContent.GetSomething () один раз, сохранить его и ссылаться на него, если мой флаг имеет значение true.Я не хочу снова вызывать PageContent.GetSomething (), если мой флаг имеет значение true.

Это может быть очень простой вопрос, но я немного застрял в том, как этого добиться.Как я могу дублировать такую ​​же функциональность из движка Razor?

Ответы [ 2 ]

5 голосов
/ 30 марта 2011

Эквивалент в Razor будет:

@{
    var obj = Rf.Models.PageContent.GetSomething();
}

@if (obj.IsSomethingHappening)
{
    <span>@obj.Name</span>
}

Очевидно, что использование представлений для извлечения данных из статических методов - одна из самых уродливых и анти-MVC практик. Представления не должны извлекать какие-либо данные. Они должны использовать только те данные, которые были предоставлены им контроллером.

Итак, вот правильный способ сделать это:

public class FooController: Controller
{
    public ActionResult Index()
    {
        var obj = Rf.Models.PageContent.GetSomething();
        return PartialView(obj);
    }
}

и в соответствующем представлении (~/Views/Foo/Index.cshtml):

@model AppName.Models.SomeViewModel
@if (Model.IsSomethingHappening)
{
    <span>@Model.Name</span>
}

и чтобы позвонить с вашего _Layout просто:

@Html.Action("Index", "Foo")
2 голосов
/ 30 марта 2011

Используйте синтаксис @ {}

@{
    var obj = Rf.Models.PageContent.GetSomething();    
 }

 @if (obj.IsSomethingHappening)
 {
     <span><@obj.Name></span>
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...