ActionLink в jQuery - PullRequest
       2

ActionLink в jQuery

1 голос
/ 11 января 2012

Это мой метод:

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

но он говорит, что currentObject не существует в текущем контексте. Как решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 11 января 2012

Вместо @Html.ActionLink вы должны использовать функцию jQuery.get .`@Html.ActionLink запускается на сервере, тогда как javascript запускается на клиенте.

$(document).ready(function () {
    $('td.clickableCell').click(function () {
        var currentObject = $(this).text();
        $.get('@Url.Action("GetThis", "Get")', {theName : currentObject});
    });
});

Url.Action отображается на сервере и даст вам соответствующий URL.$.get выполнит запрос get на клиенте.

Имейте в виду, что если этот javascript находится в файле .js, Url.Action не будет запущен.В этом случае вы можете просто заменить его на /Get/GetThis или отобразить URL-адрес в скрытом поле на странице и получить значение скрытого поля в файле .js.

Вам нужно действиеметод, который выглядит следующим образом для доступа к параметру:

public ActionResult GetThis(string theName)
{
    // manipulate theName
    return View();
}
4 голосов
/ 11 января 2012

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 в качестве параметра запроса (и одновременно кодируем его).

1 голос
/ 11 января 2012

Вы смешиваете код на стороне клиента с кодом на стороне сервера. Эта строка выполняется на сервере до того, как что-либо отправлено клиенту:

@Html.ActionLink("GetThis", "Get", new {theName = currentObject} )

Эта строка сама по себе ссылается на то, чего не существует. currentObject не будет существовать до тех пор, пока не будет создано на клиенте в JavaScript. Этот код JavaScript, с точки зрения сервера, является не чем иным, как текстом.

...