这是我的方法:
$(document).ready(function () {
$('td.clickableCell').click(function () {
var currentObject = null;
currentObject = $(this).text();
@Html.ActionLink("GetThis", "Get", new {theName = currentObject} )
});
});
但是它说当前上下文中不存在currentObject。如何解决这个问题?
答案 0 :(得分:5)
您应该使用jQuery.get功能代替@Html.ActionLink
。 `@Html.ActionLink在服务器上运行,而javascript在客户端上运行。
$(document).ready(function () {
$('td.clickableCell').click(function () {
var currentObject = $(this).text();
$.get('@Url.Action("GetThis", "Get")', {theName : currentObject});
});
});
Url.Action
在服务器上呈现,并为您提供相应的网址。 $.get
将在客户端上运行get
请求。
请注意,如果此javascript位于.js
文件中,则Url.Action
将不会运行。在这种情况下,您可能只想将其替换为/Get/GetThis
或在页面上的隐藏字段中呈现网址,并获取.js
文件中隐藏字段的值。
您需要一个看起来像这样的操作方法才能访问参数:
public ActionResult GetThis(string theName)
{
// manipulate theName
return View();
}
答案 1 :(得分:4)
currentObject
是您尝试传递到服务器端代码的JavaScript String对象。如果您需要在客户端执行此操作,
$(function () {
$('td.clickableCell').click(function () {
var currentObject = $(this).text();
// find the anchor element that you need to change,
// then change the property on it to the value
// of currentObject
$('a').attr('title', currentObject);
});
});
或者,您可能需要以某种方式将值发送到服务器。如果上面的JavaScript在Razor视图中,那么
$(function () {
$('td.clickableCell').click(function () {
var currentObject = $(this).text();
// make a HTTP GET request and pass currentObject as a queryparam
window.location = '@Url.Action("Action", "Controller")' + '?theName=' + encodeURIComponent(currentObject);
});
});
'@Url.Action("Action", "Controller")'
部分将在服务器端进行评估,并由UrlHelper解析为URL以路由到该控制器操作。我们将此值放在单引号中,因为我们需要在JavaScript变量的客户端使用它。然后我们添加currentObject
作为查询参数(并同时对其进行编码)。
答案 2 :(得分:1)
您将客户端代码与服务器端代码混合在一起。在将任何内容发送到客户端之前,此行正在服务器上执行:
@Html.ActionLink("GetThis", "Get", new {theName = currentObject} )
该行本身引用了一些不存在的东西。 currentObject
在客户端使用JavaScript创建之前不会存在。从服务器的角度来看,JavaScript代码只不过是文本。