[英]Execute javascript function with 'this' keyword as parameter in WebBrowser C#
[英]Execute a C# Lambda expression inside a Javascript function with Parameter
我在ASP.NET MVC Web应用程序的View中有一个Javascript函数。
在我的页面中传递的模型是一个列表。
@model IEnumerable<DeliveryDashboard.Models.LeaveDetailsModel>
Javascript函数如下所示:
function ShowLeavePopup(ParameterEmpID) {
var selecteddates = @Model.Where(i => i.EmpID == ParameterEmpID).Select(c => c.ExistingLeaveString).FirstOrDefault();
alert(selecteddates);
// do stuff with the selecteddates
}
此代码不起作用。 我试图检索的model属性是一个简单的字符串数据。
如果我对lambda表达式中的数据进行硬编码,那么它将起作用。 但是,如何使其从javascript方法签名中读取参数?
var selecteddates = "@Model.Where(i => i.EmpID == 112233).Select(c => c.ExistingLeaveString).FirstOrDefault();
alert(selecteddates)"
我总是可以进行Ajax调用并将其回发到服务器以从数据库中获取数据。 但是,由于我所需的数据已经在“模型列表”中提供了,是否有可能以某种方式从模型本身中提取数据?
您有两个问题:
如果您在浏览器中查看生成的代码,则应该能够看到的第一个问题 。 请记住,在JavaScript中使用C#代码只会输出该值。 它不会包含您需要的任何JavaScript语法。
你有这个:
var selecteddates = @Model.Where(i => i.EmpID == ParameterEmpID).Select(c => c.ExistingLeaveString).FirstOrDefault();
假设Model.Where(i => i.EmpID == ParameterEmpID).Select(c => c.ExistingLeaveString).FirstOrDefault()
返回Some String
。 生成的JavaScript代码最终将是:
var selecteddates = Some String;
那不是有效的JavaScript。 您需要在JavaScript需要它们的地方明确地加上引号:
var selecteddates = "@Model.Where(i => i.EmpID == ParameterEmpID).Select(c => c.ExistingLeaveString).FirstOrDefault()";
(请注意,引号应在分号之前-Stuart的注释中有错字)
第二个问题是您正在混合服务器端和客户端代码。 剃刀表达式在服务器端评估。 JavaScript是在客户端评估的。 因此,您不能像在尝试使用.Where(i => i.EmpID == ParameterEmpID)
那样在Razor表达式中使用JavaScript变量,因为在服务器上评估了Where
。
您将必须找出一种不同的方式来做到这一点。 您可以想到两种选择:
var empLeaves = @JsonConvert.SerializeObject(Model.Select(e => new {e.EmpID, e.ExistingLeaveString}));
然后更改ShowLeavePopup
函数,以在empLeaves
列表中搜索具有正确empId
。 但是请记住,查看该页面的任何人都可以按F12键,并查看员工ID列表以及您的“离开字符串”是什么,这可能是也可能不是允许用户查看的机密信息。
ShowLeavePopup
使用EmpID
向服务器发出AJAX请求,您可以在其中验证他们又是谁并返回数据。 function ShowLeavePopup(ParameterEmpID) {
var selecteddates = @Html.Raw(@Model.Where(i => i.EmpID == ParameterEmpID).Select(c => c.ExistingLeaveString).FirstOrDefault());
alert(selecteddates);
// do stuff with the selecteddates
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.