Asp.net mvc 使用asp.net mvc将当前控制器名称设置为页面加载时可观察到的淘汰

Asp.net mvc 使用asp.net mvc将当前控制器名称设置为页面加载时可观察到的淘汰,asp.net-mvc,knockout.js,Asp.net Mvc,Knockout.js,我在一个单独的.JS文件中有以下视图模型: var vm = { ControllerName:ko.observable(), getData: function () { $.ajax({ type: 'GET', url: '/'+this.ControllerName+'/GetData', contentType: "application/json; charset=utf-8", dataType: "json", data:js

我在一个单独的.JS文件中有以下
视图模型

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(); });
我必须使用当前asp.net mvc控制器名称设置
ControllerName
可观察,并在
getData
函数中使用此可观察,以便控制器名称始终是动态的。由于无法在.JS文件中执行服务器端razor代码,因此我必须从标记文件中传递当前控制器名称,在标记文件中,我可以通过编写服务器端razor代码来获取当前控制器名称


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

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

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(); });
CSHTML

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

this.ControllerName
必须是
this.ControllerName()