在ASP.NET页面上动态显示数据

时间:2018-06-13 15:41:20

标签: c# asp.net-mvc asp.net-web-api

我有一个带有一些Web API端点的ASP.NET应用程序。

我希望每次端点接收时都附加主页上显示的数据。

我怎样才能以最简单的方式实现它。我将不胜感激任何帮助。

编辑:

Api控制器:

public class ValuesController : ApiController
{
    public static event EventHandler<string> DataPosted;

    public IHttpActionResult Get(string value)
    {
        DataPosted?.Invoke(this, value);
        return Ok();
    }
}

主页控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ValuesController.DataPosted += (s_, e_) =>
        {
            ViewBag.MyData += Environment.NewLine + e_;
        };

        return View();
    }
}

首页查看:

<div class="row">
    <div class="col-md-4">
        <h2>Output</h2>
        <p>@ViewBag.MyData</p>
    </div>
</div>

当然,这不起作用。我想我需要找到一种方法来强制部分页面负责显示@ViewBag.MyData来刷新。我也尝试了部分视图,但没有任何运气。

1 个答案:

答案 0 :(得分:2)

我认为解决这个问题的方法不正确。

您有一个浏览器向您的网络应用发出请求以查看主页。 Web应用程序将使用ViewBag.MyData的内容为浏览器提供主页。

您有一个端点ValuesController.Get(字符串值),当它被调用时,您希望它更新ViewBag.MyData中的值,并且不可避免地更新主页及其内容。

问题是:

  1. 当你调用ValuesController.Get(字符串值)时,它不会向浏览器返回任何内容,因为它不知道如何操作。
  2. 您使用的ViewBag不适合您尝试执行的操作。主要是因为它只保存当前请求生命周期的数据。当另一个请求进来时,它消失了。
  3. 修正是:

    1. 更改ValuesController.Get以便它所做的就是将值存储在某个地方(我会选择数据库,但是如果你需要快速和脏的东西,请尝试创建一个带有1个静态字符串属性的静态类并将其存储在那里,或者也许将其存储在应用程序变量中。)
    2. 创建一个名为GetValue()的新端点,所有应该做的就是从存储它的任何地方检索该值。
    3. 编写客户端代码(我会使用JQuery / Ajax)定期调用GetValue()端点,它只返回您希望在主页上更新的最新值。
    4. 如果要求是将值传递给ValuesController.Get(字符串值)的值超过应用程序的生命周期,那么我强烈建议将该值存储在某个数据库中。存储在静态变量和应用程序变量中的值仅在AppDomain执行时生效(如果重新启动Web应用程序,或关闭它们,这些值或丢失,但在数据库中,它仍然存在)。