MVC5:数字标牌网站

时间:2014-06-17 21:20:06

标签: asp.net-mvc-5

我正在尝试建立一个可在我公司的电视屏幕上运行的数字标牌网站。我的想法是使用MVC使分割表示层和数据层相当容易。我需要一个显示各种页面的网站 - 有些页面会显示谷歌式仪表板控件,如量表和表格,一些公告,以及当页面翻转进出时沿着底部爬行的新闻自动收报机。问题是我对MVC不太熟悉。

我的网站每5或10秒切换到一个新页面时遇到很多问题。我对如何使用布局页面,部分视图和回调到控制器感到困惑。我已经为此工作了四天所以我有大量的代码,但我不想把它全部粘贴在这里。

只是我尝试过的基础知识(我将省略像head元素和我没有做任何特殊事情的样板文件):

_ViewStart

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}

_layout

<div class="container body-content">
    @RenderBody()        
</div>

<footer>
    <hr />
    <marquee behavior="scroll" direction="left"><img src="http://www.html.am/images/html-codes/marquees/fish-swimming.gif" width="94" height="88" alt="Swimming fish" /></marquee>
    <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
</footer>

Company1_Layout

@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<body class="greybackground container">
<header>
    <img src="~/images/homesafetymatters_header.png" alt="Home Safety Matters"/>
</header>
<div class="container body-content" style="height:100%">
    @RenderBody()
</div>

(这是我尝试启动网站,然后开始调用新页面的地方)

@model DigitalSignsPages.Models.Home

@{
    ViewBag.Title = "Home";
}

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body>
    <h2>Welcome to Digital Signage v2.0</h2>


    <script>
    window.setInterval(yourfunction, 5000);

    function yourfunction() {
        $.ajax({
            url: '/Gauge/GoToHSMGauge',
            data: { id: 1 },
            success: function () {
                console.log('Added');
            }
        });
    }
</script>

GaugeController

public ActionResult GoToBrooksGauge(int id)
    {
        decimal answer = repository.GetGaugeData("001", 1);
        ViewBag.Title = "Gauge";
        ViewBag.Pct = answer;
        return View("HSMGauge");
    }

我遇到的问题 我试图直接在我的javascript函数中调用一个动作,并且这种方式有效,但它似乎在该调用后直接刷新任何HTML,因此会有一些端括号和分号等等。我想我必须使用AJAX来调用控制器动作方法,事实上,我的控制器中的断点每5秒就会被击中,但没有任何反应。 No no View出现。

我想我必须为新视图指定一个区域,比如a,然后我调用$(&#34;#foo&#34;)......什么?加载,还是HTML?我不确定,似乎都没有做任何事情。但似乎我应该使用Render动作,但我不确定是否应该使用RenderPartial()...不能使它成为Home.cshtml页面的一部分?我想要一个新页面出现,HSMGauge.cshtml。

另外,我尝试将计时器放在_Layout页面中,然后保留一个可以传递给控制器​​的javascript变量,但似乎存在问题,因为我会得到一个错误,即变量已经输出当我这样做时的范围。所以现在我的想法是让Home.cshtml从网站上启动,然后当每个控制器中的action方法被调用时,它返回一个要打开的特定视图。但正如我所说,当控制器中的动作被调用时,没有任何反应。没有错误,只是没有。

基本上,如果有人有时间或精力,他们是否可以指出我做错的一些事情,一些很好的例子或网站告诉我如何做到这一点,我无法用谷歌找到,或者也许只是告诉我,我正在用MVC咆哮错误的树?

1 个答案:

答案 0 :(得分:4)

根据您的说明,我使用客户端Javascript框架(Single Page Application (SPA)AngularJS后端进行WebAPI。如果您经常更换页面并使用仪表板,它将提供更好的无闪烁效果。您可以在页面之间使用转换(如powerpoint),也可以轻松地异步加载仪表板组件,以便加快页面加载速度。可以使用Breeze

等工具在客户端缓存数据

为了学习AngularJS - 我建议您查看John Pappas代码阵营PluarlSight培训课程。我在几天内就学会了。他在nuget上有一个很棒的入门模板/框架H otTowel.Angular.Breeze

在我看来,Web应用程序的未来主要是客户端应用程序调用API。越来越多的应用程序就是这样。 AngularJS很受欢迎,与其他框架等很好地集成.MS正在vNext中投资.Net WebAPI和MVC6,所以我认为它是一个很好的堆栈