.net内核在Javascript中使用razor函数

.net内核在Javascript中使用razor函数,javascript,c#,asp.net-core,Javascript,C#,Asp.net Core,嗨,我在js中使用了c代码。我的js和.cshtml页面是分开的。我在.cshtml页面中编写了一个函数,并在.js文件中调用它 在Js文件中 DataList.forEach(function (item) { ... var users = GetUsers(item.AssignedUsers); 它在这里 Index.cshtml <script> function GetUsers(userIdList) { //it l

嗨,我在js中使用了c代码。我的js和.cshtml页面是分开的。我在.cshtml页面中编写了一个函数,并在.js文件中调用它

在Js文件中

DataList.forEach(function (item) {
     ...
 var users = GetUsers(item.AssignedUsers);
它在这里

Index.cshtml

  <script>
    
        function GetUsers(userIdList) {
    //it logs it, i can get theese values from here
            console.log("userIdList");
            console.log(userIdList);
              @{ // but in here it says userIdList does not exist in current content
//also tryed this.userIdList
                  var users = userIdList.Split(",");
                  foreach (var item in users)
                  {
                      var user = _Manager.FindByIdAsync(item.UserId).Result;
    
                  }
              }
    
          }
    </script>

函数GetUsers(userIdList){
//它记录下来,我可以从这里得到这些值
log(“userIdList”);
log(userIdList);
@{//但在这里,它表示当前内容中不存在userIdList
//还尝试了this.userIdList
var users=userIdList.Split(“,”);
foreach(用户中的var项)
{
var user=\u Manager.FindByIdAsync(item.UserId).Result;
}
}
}

您可以将列表从ajax传递给控制器操作,操作返回您想要的列表。 下面是一个演示:

<button onclick="sendData()">
    send
</button>
<script>
function sendData() {
                //here is a sample list
                var list = [];
                var user1 = {};
                user1.Id = 1;
                user1.Name = "u1";
                list.push(user1);
                var user2 = {};
                user2.Id = 2;
                user2.Name = "u2";
                list.push(user2);
                $.ajax({
                type: "POST",
                url: '@Url.Action("SendData", "Test")',
                contentType: "application/json",
                data: JSON.stringify(list),
                }).done(function (data) {
                    console.log(data);
                     //the data is you want
                });
            }
</script>
结果:

任何人都可以帮助我,我无法访问c#razor
中的userIdList函数参数,在这里它说userIdList不存在
…是的,因为它是一个JavaScript变量而不是c#变量。你不能就这样把各种语言混在一起。它们在不同的时间和地点执行(浏览器用于JavaScript,服务器用于c#)。如果您需要根据JavaScript生成的值调用一些c#,那么显而易见的做法是向服务器发出AJAX请求,然后服务器可以执行c#,并返回响应。这可能有助于您阅读以下内容:(许多示例都是关于PHP的,但相同的概念适用于asp.net或任何其他服务器端语言)我明白,我也想过ajax,但它可能会花费很多。这是一个解决方案,但我必须设置简单的数据。我还在循环它,您可以在一个Ajax请求中将整个列表发送到服务器,并在那里循环,然后在响应中返回一个列表。不需要多个Ajax请求,这将是低效的
public List<User> SendData([FromBody]List<User> list) {
            //you can do something and return a list you want here
            return list;
        }
public class User {
        public int Id { get; set; }
        public string Name { get; set; }

    }