2013-06-18 2 views
0

Я хочу перенаправить на другое действие в том же контроллере и передать одно значение параметра. У меня есть этот код:Перенаправление на другое действие в том же контроллере и передача некоторых данных asp.net mvc3

public ActionResult Index() 
{ 

} 

public ActionResult SomeAction() 
{ 
    if (isFailed) 
    { 
    // Redirect to Index Action with isFailed parameter so that some message gets displayed on Index page. 
    } 
} 

Я читал об использовании TempData но мой сеанс только для чтения (для некоторой цели), таким образом, я, если я сохранить данные в TempData в SomeAction, это не помогает, так как TempData пусто в Index действия ,

Еще одна вещь, которую я пробовал, заключается в использовании RedirectToAction("Index","Test", new { param = isFailed}) в return выписке из SomeAction. Это работает, и я могу получить доступ к param в Index действию с использованием Request.QueryString['param'], но проблема с этим адресом теперь становится /AreaName?param=true, где я хочу, чтобы это было /AreaName/Test/.

Это моя карта маршрутов:

 context.MapRoute(
      "default", 
      "AreaName/{controller}/{action}/{param}", 
      new { controller="Test", action = "Index", param=UrlParameter.Optional }, 
     ); 

Я представляю формы с помощью «пост» от MyJS.js к SomeAction.

Есть ли альтернатива/метод обхода пути для этого? В двух словах, я хочу, чтобы эти три вещи:

  1. Перенаправление на Index действие.
  2. Передайте значение param от SomeAction до Index.
  3. Держите URL: http://localhost/AreaName/Test/

ответ

0
  • Перенаправление на Index действие.

Применение return RedirectToAction("Index","Home");

  • Pass значение парам от SomeAction к Index.

Вы можете использовать объект TempData.

Значение свойства TempData хранится в состоянии сеанса. Любой метод действий, который вызывается после значения TempDataDictionary, может получать значения от объекта, а затем обрабатывать или отображать их. Значение TempData сохраняется до тех пор, пока оно не будет прочитано или пока сеанс не закончится.

Вы можете сделать это, как показано ниже:

public ActionResult Index() 
{ 
    //you can access TempData here. 
} 

public ActionResult SomeAction() 
{ 
    if (isFailed) 
    { 
     TempData["Failure"] = "Oops, Error"; //store to TempData 
     return RedirectToAction("Index" , "Home"); 
    } 
    return View(); 
} 

This MSDN article объясняет все.

  • Держите URL: http://localhost/AreaName/Test/

Вы можете сделать это путем добавления маршрута в вашем RouteConfig.cs

context.MapRoute(
      "default", 
      "AreaName/Test/", 
      new { area = "AreaName" controller="Test", action = "Index"}, 
     ); 
+0

Как я уже говорил, я не могу использовать TempData, потому что мое состояние сеанса только для чтения, а временные данные используют сеанс по умолчанию для хранить данные. Мы можем переопределить это поведение, но это требует переопределения поставщика по умолчанию, который снова не может меняться в моем коде. Для части URL я не хочу, чтобы параметр запроса отображался в строке url. Как это можно сделать? – ezile

+0

Я думаю, что вы добавили это к ur questn после того, как я ответил на это. –

+0

Нет, это было упомянуто только ранее. – ezile

1

Попробуйте

public ActionResult Index(Datatype param) 
{ 

} 
public ActionResult SomeAction() 
{ 
if (isFailed) 
{ 
    return RedirectToAction("Index" , "Home",new{param= value }); 
}  
return View(); 
} 
Смежные вопросы