У меня есть простая функция, которую я хочу вызвать в коде за именем файла 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);
}
}






Вы не можете выполнять обратные передачи или вызывать что-либо в представлении из JavaScript в приложении ASP.NET MVC. Все, что вы хотите вызвать из JavaScript, должно быть действием на контроллере. Трудно сказать больше, не имея более подробной информации о том, что вы пытаетесь сделать, но если вы хотите вызвать какой-либо метод «Move» в своем веб-приложении из JavaScript, тогда «Move» должно быть действием на контроллере.
Основываясь на комментариях, я собираюсь обновить этот ответ более полным описанием того, как вы можете реализовать то, что я понимаю как проблему, описанную в вопросе. Однако в этом вопросе отсутствует довольно много информации, поэтому я предполагаю здесь. Надеюсь, общая идея будет реализована, даже если некоторые детали не соответствуют точному коду TStamper.
Начнем с действия контроллера:
public ActionResult ShowMyPage();
{
return View();
}
Теперь я знаю, что хочу повторно отобразить эту страницу, и для этого использую аргумент, переданный из функции JavaScript на странице. Поскольку я снова буду отображать ту же страницу, я просто изменю действие, чтобы принять аргумент. Строковые аргументы допускают значение NULL, поэтому я могу продолжить первоначальное отображение страницы, как всегда, не беспокоясь об указании какого-либо значения по умолчанию для аргумента. Вот новая версия:
public ActionResult ShowMyPage(string searchQuery);
{
ViewData["SearchQuery"] = searchQuery;
return View();
}
Теперь мне нужно снова вызвать эту страницу в JavaScript. Поэтому я использую тот же URL-адрес, который использовался для первоначального отображения страницы, но добавляю параметр строки запроса с именем таблицы:
http://example.com/MyControllerName/ShowMyPage?searchQuery=tableName
Наконец, в моем aspx я могу вызвать код функции, передав запрос searchQuery из данных представления. Еще раз, у меня есть серьезные сомнения по поводу использования кода в приложении MVC, но это сработает.
Как вызвать функцию кода программной части в aspx:
<% Search(ViewData["searchQuery"]); %>
Я изменил аргументы. Поскольку вы не обрабатываете событие (за некоторыми исключениями, такими как Page_Load, их нет в MVC), функции поиска не требуется подпись обработчика событий. Но я добавил аргумент «tablename», чтобы вы могли передать его из aspx.
Я еще раз выражу свои сомнения по поводу того, чтобы делать это в программном коде. Мне кажется, что вы пытаетесь использовать стандартные методы ASP.NET внутри инфраструктуры MVC, когда MVC работает по-другому. Я настоятельно рекомендую просмотреть учебные материалы по MVC, чтобы увидеть примеры более стандартных способов выполнения подобных задач.
Я пытаюсь сделать то, что я динамически привязываю таблицу в доде позади, и я выполняю пейджинг из БД, поэтому, когда нажимается img of next, я хочу, чтобы это запускало действие в коде позади, чтобы повторно привязать новую таблицу в код позади. от контроллера, как бы я привязался к таблице, которая находится в представлении
Я обновил первый вопрос, чтобы показать, как я связываю таблицу в методе поиска с помощью кнопки asp:
Что ж, у меня есть оговорки по поводу использования скрытого кода в приложении MVC, вы можете заставить это работать. Добавьте аргумент к действию для имени таблицы. Вызовите то же действие в своем сообщении, передав новое имя таблицы в качестве аргумента.
? Я не понимаю, что вы говорите делать
Хорошо, это больше, чем я могу вместить в комментарий, поэтому я обновлю ответ.
Конечно, нет; это example.com! Я просто демонстрирую синтаксис параметра строки запроса, а не создаю сайт для вас.
Я думал, вы собираетесь показать, как вызвать код функции?
Я пытаюсь это сделать, и когда я запускаю свой код ... программа запускает метод автоматически, и я хочу, чтобы он делал это только при щелчке по событию, например <a href = "#" class = "move" id = "A1" onclick = "<% Search ();%>"> <% = Move%> </a>
Еще раз: вы не можете вызвать метод кода программной части непосредственно из события щелчка. MVC так не работает. Есть постбэки нет.
о, хорошо .. Я думаю, я не заметил эту часть?
У Скотта Гатри есть очень хороший пример о том, как это сделать с помощью правил маршрутизации.
Это даст вам возможность переходить по 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-адреса следующей кнопки.
это помогло мне понять, что нужно подходить к этому по-другому .. Спасибо
да, я знаю, как вызвать его из контроллера, который будет $ .post ("Move" {}); есть ли способ заставить это перейти к коду того же представления