![](/img/trans.png)
[英]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.