我实际上有两个问题。我正在构建一个帮助程序来控制何时向公众呈现某些内容。我有一个客户网站需要内容在特定时间上线。因此,例如,主页上的新英雄图像需要在12日凌晨1点上线,并且需要在凌晨1点停止在19日呈现。我需要能够在我的视图中使用这个帮助器,如下所示:
@Html.DurationControl("Partial/_HeroImage", new DateTime(2015, 02, 12, 01, 00, 00), new DateTime(2015, 02, 19, 01, 00, 00))
是否可以从HTML.Helper返回部分视图?
这种方法是实现目标的最佳方式吗?
public static PartialViewResult DurationControl(this HtmlHelper html, string view, DateTime start, DateTime end){
DateTime Now = DateTime.Now;
if (Now > start && Now < end)
{
return PartialView(view);
}
}
注意:感谢Berin Loritsch和Chris Pratt的以下答案,我能够让它发挥作用。以下是我最终的结果:
public static MvcHtmlString DurationControl(this HtmlHelper html, string view, DateTime start, DateTime end)
{
DateTime Now = DateTime.Now;
if (Now > start && Now < end)
{
return html.Partial(view);
}
else
{
return null;
}
}
答案 0 :(得分:1)
在Asp.Net MVC中,您有两个想要保持直观的概念:
目前还不清楚你要根据时间控制哪些,所以我将涵盖这两种情况。
选择一页与另一页
您在控制器中收到一个请求,并选择要返回的视图。在这种情况下,您的代码非常简单:
[Post]
public ActionResult Page(string view, DateTime start, DateTime end)
{
// We are handling user input from a form
DateTime Now = DateTime.Now;
if (Now > start && Now < end)
{
return View(view);
}
return View();
}
您很可能会从您自己的代码中提取视图以及开始和结束日期,甚至是会话信息。这种方法的效果是返回一页而不是另一页。
嵌入代码段
这是HTML帮助程序的用武之地。部分通常以前导下划线命名&#34; _Partial.cshtml&#34;。 HTML帮助程序的要点是在处理输出流时写入。从本质上讲,它为您插入HTML。在这种情况下,您可以稍微更改一下代码:
public static ActionResult DurationControl(this HtmlHelper html,
string view, DateTime start, DateTime end)
{
DateTime Now = DateTime.Now;
if (Now > start && Now < end)
{
RenderPartial(view);
}
}
MVC将首先查看当前控制器的视图,然后回到共享视图文件夹,如果它在那里找不到它。
答案 1 :(得分:0)
没有。视图应该由控制器返回,因此您可以将逻辑放在那里。 HTML Helpers可以帮助您在视图中构建一些自定义内容(但在大多数情况下,PartialViews也更适合这里)。
答案 2 :(得分:0)
如果你只是把它放在你的视图中,这就是你拥有的代码:
@if (DateTime.Now > new DateTime(2015, 02, 12, 01, 00, 00) && DateTime.Now < new DateTime(2015, 02, 19, 01, 00, 00))
{
@Html.Partial("partial/heroimage")
}
当然,它不是最漂亮的东西,但它也不是那么糟糕。可以说这是完全可以接受的。如果你真的需要抽象出这个相当基本的逻辑,你只需要对你的帮助器进行建模,就像这段代码一样:
public static MvcHtmlString DurationControl(this HtmlHelper helper, string partial, DateTime start, DateTime end)
{
if (DateTime.Now > start && DateTime.Now < end)
{
return helper.Partial(partial);
}
return new MvcHtmlString();
}