вызов кода за функциями с элементами управления html - PullRequest
0 голосов
/ 18 декабря 2008

У меня есть простая функция, которую я хочу вызвать в коде имени файла Move и я пытался увидеть, как это можно сделать, и я не использую кнопку изображения asp, потому что не пытаюсь использовать серверные элементы управления asp, так как они, как правило, плохо работают с ASP.net MVC .. как это настроено сейчас, это будет искать функцию JavaScript с именем Move, но я хочу, чтобы она вызывала функцию с именем Move в коде того же представления

 <img alt='move' id="Move" src="/Content/img/hPrevious.png" onclick="Move()"/>


protected void Move(){

}

// на основе критериев поиска обновить новую таблицу

 protected void Search(object sender EventArgs e)
{
 for (int i = 0; i < data.Count; i++){
 HtmlTableRow row = new HtmlTableRow();
 HtmlTableCell CheckCell = new HtmlTableCell();
 HtmlTableCell firstCell = new HtmlTableCell();
 HtmlTableCell SecondCell = new HtmlTableCell();
 CheckBox Check = new CheckBox();
 Check.ID = data[i].ID;
 CheckCell.Controls.Add(Check);
 lbl1.Text = data[i].Date;
 lbl2.Text = data[i].Name;
  row.Cells.Add(CheckCell);
  row.Cells.Add(firstCell);
  row.Cells.Add(SecondCell); 
  Table.Rows.Add(row);
}

}

Ответы [ 2 ]

1 голос
/ 19 декабря 2008

Скотт Гатри имеет очень хороший пример о том, как сделать это с помощью правил маршрутизации.

Это даст вам возможность перейти к URL-адресу в формате / Search / [Query] / [PageNumber], например http://site/Search/Hippopotamus/3, и отобразит страницу 3 результатов поиска для бегемота.

Тогда, на ваш взгляд, просто установите следующую кнопку на "http://site/Search/Hippopotamus/4",, JavaScript не требуется.

Конечно, если вы хотите использовать javascript, вы можете сделать что-то вроде этого:

function Move() {
    var href = 'http://blah/Search/Hippopotamus/2';
    var slashPos = href.lastIndexOf('/');
    var page = parseInt(href.substring(slashPos + 1, href.length));
    href = href.substring(0, slashPos + 1);

    window.location = href + (++page);
}

Но это намного сложнее, чем просто увеличить параметр номера страницы в контроллере и задать URL следующей кнопки.

0 голосов
/ 18 декабря 2008

Вы не можете выполнять обратную передачу или вызывать что-либо в представлении из JavaScript в приложении ASP.NET MVC. Все, что вы хотите вызвать из JavaScript, должно быть действием на контроллере. Трудно сказать больше, не имея более подробной информации о том, что вы пытаетесь сделать, но если вы хотите вызвать какой-либо метод «Переместить» в своем веб-приложении из JavaScript, тогда «Переместить» должно быть действием на контроллере.

Основываясь на комментариях, я собираюсь дополнить этот ответ более подробным описанием того, как вы можете реализовать то, что я понимаю как проблему, описанную в вопросе. Однако в этом вопросе не хватает информации, поэтому я размышляю здесь. Надеемся, что общая идея будет реализована, даже если некоторые детали не соответствуют точному коду TStamper.

Давайте начнем с действия контроллера:

public ActionResult ShowMyPage();
{
    return View();
}

Теперь я знаю, что хочу повторно отобразить эту страницу и сделать это с помощью аргумента, переданного функцией JavaScript на странице. Поскольку я снова буду отображать ту же страницу, я просто изменю действие, чтобы принять аргумент. Строковые аргументы обнуляются, поэтому я могу продолжать делать начальное отображение страницы, как всегда, не беспокоясь о том, чтобы указать какое-либо значение по умолчанию для аргумента. Вот новая версия:

public ActionResult ShowMyPage(string searchQuery);
{
    ViewData["SearchQuery"] = searchQuery;
    return View();
}

Теперь мне нужно снова вызвать эту страницу в JavaScript. Поэтому я использую тот же URL-адрес, который использовался для первоначального отображения страницы, но я добавляю параметр строки запроса с именем таблицы:

http://example.com/MyControllerName/ShowMyPage?searchQuery=tableName

Наконец, в моем aspx я могу вызвать функцию с кодом, передавая searchQuery из данных представления. Еще раз, у меня есть серьезные оговорки относительно использования кода в приложении MVC, но это будет работать.

Как вызвать функцию code-behind в aspx:

<% Search(ViewData["searchQuery"]); %>

Я изменил аргументы. Так как вы не обрабатываете событие (за некоторыми исключениями, такими как Page_Load, в MVC их нет), функции поиска не требуется подпись обработчика события. Но я добавил аргумент "tablename", чтобы вы могли передать его из aspx.

Еще раз, я выскажу свои оговорки по поводу этого в коде позади. Меня поражает, что вы пытаетесь использовать стандартные методы ASP.NET внутри инфраструктуры MVC, когда MVC работает иначе. Я бы настоятельно рекомендовал пройтись по учебным пособиям по MVC, чтобы увидеть примеры более стандартных способов выполнения подобных действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...