2013-12-04 3 views
3

В моем проекте ASP.Net я пытаюсь перенаправить страницу на другое действие после выбора таблицы строк и нажать на кнопку. Поэтому у меня есть этот код:Перенаправить действие с параметрами в JQuery

JQuery:

function editItem(tableId, url) { 
      if ($("#" + tableId + " .selected").exists()) { 

       var thisRowId = $("#" + tableId + " .selected").attr("id"); 

       window.location.replace(url, { operation: "edit", carId: thisRowId }); 
      } 
     }; 

    //more code 

View (ManagementCar):

@model myProject.Model.Car.Car[] 

<table class="table" id="tableCars"> 
    <thead> 
     @*some code to header*@ 
    </thead> 
    <tbody> 
      foreach (var item in Model) 
      { 
      <tr id="@(item.Id)" onclick="selectRow('tableCars', '@(item.Id)')"> 
       <td> 
        @Html.DisplayFor(modelItem => item.Name) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.OwnerName) 
       </td> 
       <td> 
        @(item.IsSold == true ? "Yes" : "No") 
       </td> 
      </tr> 
      } 
    </tbody> 
</table> 
<br /> 
<button id="btEdit" type="button" class="disable" onclick="editItem('tableCars','CarOperation')"> 
    Edit</button> 

Контроллер:

 [HttpGet] 
     public ActionResult CarOperation(string operation, int carId) 
     { 
      //some code... 

      return RedirectToAction("ManagementCar", "Backoffice"); 
     } 

Но у меня есть Ошибка сервера после перенаправления, указав параметр carId равным нулю. Я отлаживаю свой jquery, и этот параметр не равен нулю. Я пытался также делать

$.get(url, { operation: "edit", carId: thisRowId }); 

вместо

window.location.replace(url, { operation: "edit", carId: thisRowId }); 

но не перенаправлять. Как я могу это решить?

ответ

0

Хорошо, я наконец-то решил проблему с новой конфигурации URL маршрутизации и следующий код:

Мои RouteConfig:

routes.MapRoute(
      name: "ManipulatingCar", 
      url: "{controller}/{action}/{operation}/{carId}" 
     ); 

Мой JQuery:

editItem = function (tableId, url) { 
    if ($("#" + tableId + " .selected").exists()) { 

     var thisRowId = $("#" + tableId + " .selected").attr("id"); 

     var fullUrl = url + "/edit/" + thisRowId; 

     window.location = fullUrl; 
    } 
}; 

Основные ally, параметры действия контроллера должны совпадать с конфигурациями, указанными в RouteConfig.cs

0

установите его, придав ему новое значение, подобное этому.

window.location = window.location.replace(url, "shouldBeAstringNotAJsonObject"); 
+0

Отлично! Наконец, это работает! Огромное спасибо! – Ninita

+0

Извините, на самом деле у меня есть ошибка.Он перенаправляет меня на неопределенную страницу, например: 'https: // localhost/myProject/Backoffice/undefined'. Я не понимаю, почему ...? – Ninita

+0

Функция замены javascript занимает 2 строки в качестве параметров. вы передаете объект json по второму параметру. http://www.w3schools.com/jsref/jsref_replace.asp –

0

Проблема с использованием window.location заключается в том, что реферер не передается по запросу, поскольку это поведение просто имитирует новый запрос, как если бы вы набрали URL-адрес в адресная строка. Если вы намерены использовать аналитику веб-сайта, надежный реферер будет очень важен. Я использую jQuery для создания динамической ссылки, на которой я звоню click().

var url = '/my/url'; 
$('<a href="' + url + '"></a>')[0].click(); 

Примечание Я click() базового элемент не JQuery выбранного объекта, причина в том, что Jquery только нажать вызывает событие и HREF не перемещаться в то время как индексация к элементу и мышам, которые будут вызывать такое же поведение вы ожидали бы, как будто вы на самом деле нажали ссылку на странице.

Я собрал jQuery.navigate plugin, который аккуратно обертывает это и абстрагирует вашу карту сайта от вашей логики пользовательского интерфейса, которая может вам пригодиться. Например, использование моего плагина означает, что вы можете полностью удалить свою функцию editItem и просто изменить свою разметку на что-то вроде этого?

<tr id="@(item.Id)" onclick="$.navigate('to', 'edit', { id : '@(item.Id)' })"> 
Смежные вопросы