【问题标题】:Calling C# Function from ASP.NET View [duplicate]从 ASP.NET 视图调用 C# 函数 [重复]
【发布时间】:2018-08-24 20:31:19
【问题描述】:

我有一个 ASP.Net 实体框架视图,其中有多个下拉列表。一旦用户更改此列表中的项目,我需要调用一个 c# 方法,该方法将所有下拉列表中的值传递给检查它们的值是否重叠。

目前我有:

@Html.DropDownListFor(model => model.Periods[i].StartTime, new SelectList(Model.DateTimeList, Model.Periods[i].StartTime), new {@class = "form-control", onchange = "dropdownChange()" })

其中调用了一个名为dropdownChange()的方法:

<script>
    function dropdownChange() {
        @{
            var overlapping = PeriodController.ConfigureViewModel.IsOverLapping(Model);
        }
        console.log("here");
    }
</script>

此方法由视图找到,但不会进入我的 c# 代码,因为我已通过放入 javascript 代码进行测试并运行它。例如console.log 出现但不调用 c# 代码。

每次更改下拉列表时都可以使用解决方案或更复杂的方法来调用 c# 方法。

添加Ajax方法:

$.ajax({
    type: "POST",
    data: { 'Model': Model },
    success: function(isOverLapping) {
        overLappping = isOverLapping;
        console.log(1);
    },
    error: function() {
        console.log(2);
    }
});

【问题讨论】:

  • 你需要用Ajax调用控制器动作方法..
  • 我添加了一个 ajax 方法,但找不到变量 Model,当我在 c# 中有它时可以找到它。见原帖
  • 您混淆了服务器端代码和客户端代码。您的 C# 模型/类代码不存在于用户的浏览器中(在 AJAX 区域中)。您可以传递模型的一个实例,但它只是原始数据。您不能使用 JavaScript 分配 C# 模型
  • 这很有意义。谢谢

标签: javascript c# asp.net asp.net-mvc entity


【解决方案1】:

一行答案:MVC 不是那样工作的。

更长的答案:您不能像这样直接从浏览器访问服务器端代码。最常见的解决方案是使用称为 AJAX 的东西来调用服务器上的 C# 函数。然后,您需要在视图中编写代码来处理来自服务器的响应。看看这个问题和这个答案:https://stackoverflow.com/a/16186212/5173105

【讨论】:

  • 并不是 MVC 不能那样工作。基于浏览器的应用程序通常不会那样工作。
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多