jQuery中的ActionLink

时间:2012-01-11 17:46:58

标签: c# jquery asp.net-mvc actionlink

这是我的方法:

$(document).ready(function () {
    $('td.clickableCell').click(function () {
        var currentObject = null; 
        currentObject = $(this).text();
        @Html.ActionLink("GetThis", "Get", new {theName = currentObject} )
    });
});

但是它说当前上下文中不存在currentObject。如何解决这个问题?

3 个答案:

答案 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代码只不过是文本。