2014-06-09 48 views
0

我有以下的在一个单独的.js文件view model页面加载观察到淘汰赛:设置电流控制器名称使用asp.net的MVC

var vm = { 

ControllerName:ko.observable(), 
getData: function() { 

    $.ajax({ 
    type: 'GET', 
    url: '/'+this.ControllerName+'/GetData', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data:jsonData, 
    success: function(data){ 
     // code to bind the data 
    } 
    }); 

} } 

$(function() { 
ko.applyBindings(C1ViewModel); 
C1ViewModel.getVisibleAndInvisibleColumns(); }); 

我必须设置ControllerName观察到与当前的ASP。 net mvc控制器名称,并在getData函数中使用此可观察值,以便控制器名称始终是动态的。由于我们无法在.JS文件中执行服务器端剃须刀代码,因此我必须从我的标记文件中传递当前控制器名称,我可以通过编写服务器端剃刀代码来获取当前控制器名称。

我的问题是如何将我的html中的值传递给我的视图模型,将其设置为可观察值并将其用作整个视图模型中的全局值?有没有其他方法可以实现我在上面做的事情?

+0

'this.ControllerName'必须是'this.ControllerName()' – haim770

回答

0

您可以在标记中使用脚本标记来声明设置控制器名称的JS变量。然后,您可以访问,这是您的.js文件:

CSHTML

<script> 
    var urlForController = "@Url.RouteUrl("DefaultApi", 
           new { httproute = "", 
             controller = "ControllerNameHere", 
             action = "GetData" })";  
</script> 

您可以在此代码添加额外的逻辑,如果控制器名称上的一些具体标准各不相同。

AJAX调用JS中:

$.ajax({ 
    type: 'GET', 
    url: urlForController, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data:jsonData, 
    success: function(data){ 
     // code to bind the data 
    } 
    });