Javascript 从ASP.NET视图调用C#函数
我有一个ASP.Net实体框架视图,其中有多个下拉列表。一旦用户更改了此列表中的一个项目,我需要调用一个c#方法,该方法将传递所有下拉列表中的值,以检查它们的值是否重叠 目前我有:Javascript 从ASP.NET视图调用C#函数,javascript,c#,asp.net,asp.net-mvc,entity,Javascript,C#,Asp.net,Asp.net Mvc,Entity,我有一个ASP.Net实体框架视图,其中有多个下拉列表。一旦用户更改了此列表中的一个项目,我需要调用一个c#方法,该方法将传递所有下拉列表中的值,以检查它们的值是否重叠 目前我有: @Html.DropDownListFor(model => model.Periods[i].StartTime, new SelectList(Model.DateTimeList, Model.Periods[i].StartTime), new {@class = "form-control", onc
@Html.DropDownListFor(model => model.Periods[i].StartTime, new SelectList(Model.DateTimeList, Model.Periods[i].StartTime), new {@class = "form-control", onchange = "dropdownChange()" })
它调用了一个名为dropdownChange()
的方法:
一句话回答:MVC不是那样工作的
更详细的回答:您不能像那样直接从浏览器访问服务器端代码。最常见的解决方案是使用AJAX调用服务器上的C#函数。然后需要在视图中编写代码来处理来自服务器的响应。看看这个问题和答案:你需要用Ajax调用控制器动作方法。这个怎么样?我添加了一个Ajax方法,但找不到变量模型,当我在c#中使用它时,可以找到它。请参阅原始帖子:您将服务器端代码和客户端代码混为一谈。您的C#模型/类代码在用户浏览器中不存在(在AJAX区域中)。您可以传递模型的实例,但它只是原始数据。你不能用JavaScripts来分配一个C#模型,因为它很有意义。谢天谢地,MVC不是那样工作的。基于浏览器的应用程序通常不会这样工作。
<script>
function dropdownChange() {
@{
var overlapping = PeriodController.ConfigureViewModel.IsOverLapping(Model);
}
console.log("here");
}
</script>
$.ajax({
type: "POST",
data: { 'Model': Model },
success: function(isOverLapping) {
overLappping = isOverLapping;
console.log(1);
},
error: function() {
console.log(2);
}
});