如何从ASP.net中的c#调用angular.js函数

时间:2016-06-02 07:18:35

标签: asp.net angularjs function

我想从后面的代码或C#调用angular的binddata()函数。是否可以在asp.net中使用。

$scope.bindAllData = function () {
        $scope.getFundedRatio.investors = $scope.investors;
        $scope.getFundedRatio.taxRates = $scope.taxRateInfo;
        $scope.getFundedRatio.incomeAssets = $scope.incomeAssetInfo;
        $scope.getFundedRatio.futureSavings = $scope.futureSavingInfo;
        $scope.getFundedRatio.spendingGoals = $scope.spendingGoalsInfo;
        $scope.getFundedRatio.portfolioAssets = $scope.portfolioAssetsInfo;
        $scope.getFundedRatio.privateAssets = $scope.privateAssetInfo;
}

3 个答案:

答案 0 :(得分:0)

您只能从C#codebehind调用JavaScript函数,这些函数可直接在window变量上使用。 由于$ scope只能在控制器内部访问,因此不能直接访问window对象。但是,您可以在DOM中创建一个选择器元素 - 比如给任何元素一个id选择器(该元素应该在您想要调用范围方法的同一范围内)。现在,您可以使用以下方法获取元素的范围: HTML模板:创建一个带id的虚拟div。该div应存在于同一控制器范围内。

<div id='div1'></div>

您可以使用以下方法访问控制器javascript外的此元素的范围:

var elementScope =    angular.element(document.getElementById('div1')).scope()

现在您将能够访问任何范围方法或属性。

elementScope.bindAllData();

从C#代码隐藏中,您可以使用以下命令直接调用javascript代码:

Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyScopeFunction","angular.element(document.getElementById('div1')).scope().bindAllData()",true);

希望这有效!

答案 1 :(得分:0)

尝试使用webservices或wcf服务来托管逻辑并使用控制器中的http get方法来使用它们

答案 2 :(得分:-1)

我建议你采用以下方法: 尝试使用SignalR和AngularJS的组合。首先,安装SignalR Nuget-package。

Install-Package Microsoft.AspNet.SignalR

之后,使用SignalR广播消息创建一个Hub:

public class SampleHub : Hub
{
    public void Send(string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.All.broadcastMessage(message);
    }
}

在任何ASP.NET后端方法中,您可以使用以下代码段来通知您的Angular方法:

var context = GlobalHost.ConnectionManager.GetHubContext<SampleHub>();
context.Clients.All.broadcastMessage("BindAllData");

将其插入前端的脚本部分:

<script type="text/javascript" src="assets/libs/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="assets/libs/jquery.signalR.min.js"></script>
<script src="/signalr/hubs"></script>

在客户端,使用以下代码:

var sampleHub = jQuery.connection.sampleHub;
sampleHub.client.broadcastMessage = function (message) {
     Console.log(message); // Will output "BindAllData"
     // Your BindAllData-code here.
}; 
jQuery.connection.hub.start();

我希望这适合你。