我正在尝试建立一个可在我公司的电视屏幕上运行的数字标牌网站。我的想法是使用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>© @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咆哮错误的树?
答案 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,所以我认为它是一个很好的堆栈