Geo*_*ton 0 razor asp.net-mvc-3
我仍然在学习ASP.NET MVC3 Razor引擎,我正在试图完成一些看似非常简单的事情.
我有一个静态类,它封装了一个调用第三方API的方法.我的_Layout.cshtml
主页调用静态类,例如
if(@Rf.Models.PageContent.GetSomething().IsSomethingHappening) {
<span>@Rf.Models.PageContent.GetSomething().Name</span>
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在从我的静态类PageContent,方法GetSomething(它返回一个类)中复制工作(以及调用第三方API).
在常规的旧MVC2中,我会做这样的事情:
<% var obj = Rf.Models.PageContent.GetSomething();
if(obj.IsSomethingHappening) { %>
<span><%=obj.Name%></span>
<% } %>
Run Code Online (Sandbox Code Playgroud)
......不重复努力.
我想调用PageContent.GetSomething()一次,存储它,并在我的标志为真时引用它.如果我的标志是真的,我不想再次调用PageContent.GetSomething().
这可能是一个非常简单的问题,但我对如何完成它有点困惑.如何从Razor引擎中复制相同类型的功能?
Razor中的等价物是:
@{
var obj = Rf.Models.PageContent.GetSomething();
}
@if (obj.IsSomethingHappening)
{
<span>@obj.Name</span>
}
Run Code Online (Sandbox Code Playgroud)
显然,拥有从静态方法中提取数据的视图是最丑陋的反MVC实践之一.视图不应该提取任何数据.他们应该只使用控制器提供给他们的数据.
所以这是正确的方法:
public class FooController: Controller
{
public ActionResult Index()
{
var obj = Rf.Models.PageContent.GetSomething();
return PartialView(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
并在相应的视图(~/Views/Foo/Index.cshtml
)中:
@model AppName.Models.SomeViewModel
@if (Model.IsSomethingHappening)
{
<span>@Model.Name</span>
}
Run Code Online (Sandbox Code Playgroud)
并从你的_Layout
简单称呼这个:
@Html.Action("Index", "Foo")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
563 次 |
最近记录: |