视图加载后是否可以在控制器中调用操作?

Nic*_*ger 1 c# asp.net-mvc wcf asp.net-mvc-5

我正在试图找出当我的视图加载并呈现给用户时如何在我的控制器中调用方法.我已经尝试过了OnResultExecuted,OnActionExecuted但这似乎没有办法.

protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
    ConnectToDataSources();
    base.OnResultExecuted(filterContext);
}
Run Code Online (Sandbox Code Playgroud)

ConnectToDataSources方法在远程服务器上建立连接wcf服务,该服务器使用SqlDependency来触发实时更新.客户端我每次有变化时都使用SignalR来更新视图.如果没有数据的"实时流",服务将返回数据库中的最后一个值.我的问题是它似乎发生得太快,以至于我的值没有正确设置.

如果我尝试使用具有一秒延迟的计时器来愚蠢,则会显示值.但是,这不是一个稳定的解决方案,所以就像我说的那样,我试图弄清楚如何在触发ConnectToDataSources方法之前等待视图完全加载.

public void ConnectToDataSources()
{
    foreach (UnitDetailsModel unit in Model.UnitDetails)
    {
        var ods = new OperationDataSource();
        var ads = new ActivityStatusDataSource();

        ads.Start(unit.UnitId, ActivityReceived, AliveReceived);
        ods.Start(DataReceived, unit.UnitId);
        _dataSources.Add(ods);
        _activityStatusDataSources.Add(ads);
    }
}
Run Code Online (Sandbox Code Playgroud)

Adr*_*tti 5

服务器没有关于渲染事物的知识然后我建议在文档准备就绪时使用AJAX请求从客户端执行此操作:

$(document).ready(function {
    $.ajax({
        type: 'GET',
        url: '/Controller/Method', // Update with proper URL
        cache: false,
        success: function(result) {
            // You may skip this if you don't expect any result
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

现在让我们使它更通用,用服务器端生成的URL替换硬编码的URL:

url: '@Url.Action("MethodName", "ControllerName")',
Run Code Online (Sandbox Code Playgroud)

当然,您甚至可以传递一些数据(dataAJAX请求中的字段).如果您不需要任何返回值,只需将您的操作方法声明为void(success如果您不需要任何客户端检查以确保操作成功,则可以省略函数).