Попробуйте
function productSelectedCallback() {
var prodId = $(this).attr("id");
var targetUrl = '/Product/Details/' + prodId.toString();
$(this).load(targetUrl);
}
Изменить:
Измените ваш метод действия на контроллере с
public ActionResult Details(string productId)
{
return View();
}
на
public ActionResult Details(int id)
{
return View();
}
или ваш код jQuery для:
function productSelectedCallback() {
var prodId = $(this).attr("id");
var targetUrl = '/Product/Details/?productId=' + prodId.toString();
$(this).load(targetUrl);
}
У вас, вероятно, нет настройки маршрута, чтобы использовать "productId" в вашем действии.Вы все еще можете использовать его (если вы не хотите настраивать маршрут), но он должен быть в строке запроса.
Редактировать 2:
ВВ свете вашего последнего комментария, я не уверен, что вы действительно хотите использовать AJAX для своего решения, поскольку вы пытаетесь перенаправить с одной страницы на другую.Я бы предложил изменить ваш тип возврата на результат RedirectToAction.Это скажет браузеру, что вам нужно перенаправить, но это нужно будет сделать в действии, отличном от действия с информацией о вашем продукте (или вы получите бесконечный цикл перенаправления).
Попробуйте что-то вроде этого:
// In the home controller where Id = the product id
public ActionResult RedirectToProductDetails (int id)
{
// Use whatever names you want for Id and ProductId, respectively
return RedirectToAction ("Details", "Products", new { id = id });
}
// And then in your Product Controller:
public ActionResult Details (int id)
{
var MyProduct = // Get your product from the database or whatever
return View (MyProduct);
}
(Обратите внимание, что на самом деле это приведет к двум поездкам для клиента, фактически устраняя любые преимущества использования подхода "AJAX".)