2012-04-19 4 views
0

Я пытаюсь сделать это:передачи параметров между действиями

public ActionResult Index(List<Client> Client) 
{ 
    if (Client != null) 
     return View(Client); 

    return View(db.Client.ToList()); 
} 

[HttpPost] 
public ActionResult Search(string cnpj) 
{ 
    List<Client> Client = db.Client // here it finds one client 
     .Where(c => cnpj.Equals(c.Cnpj)) 
     .ToList(); 

    return RedirectToAction("Index", Client); 
} 

После действия Поиска, он идет к индексу, а параметр Client всегда пустой ..

Кто знает, почему?


Я делаю это и работает:

public ActionResult Index(string cnpj) 
{ 
    if (!string.IsNullOrEmpty(cnpj)) 
    { 
     List<Client> clients = db.Client 
     .Where(c => cnpj.Equals(c.Cnpj)) 
     .ToList(); 

     return View(clients); 
    } 

    return View(db.Client.ToList()); 
} 
+0

вы сделали, что ваш запрос фактически возвращая что-то? – JasCav

+0

Да, я уверен. Когда я отлаживаю, он получает одного клиента. – MuriloKunze

+0

Я решил, спасибо. – MuriloKunze

ответ

0

у косяка просто вызовите функцию вместо перенаправления? называют это из Search действий

Index(Client) 

, что происходит в перенаправлении является то, что HTTP Код 302 отправляется в браузер с перенаправлением URL, то браузер посылает новый запрос на сервер и поэтому Client является null, потому что браузер не может отправить его обратно. EDIT: -
после прочтения комментариев в этом случае у вас два варианта
1.one, чтобы сделать еще один Index действия и изменить тип параметра в строку, так что теперь Улла быть в состоянии назвать, что непосредственно
2.Use TempData() , который является специальным хранилищем, предоставляемым MVC, который может хранить объект в течение некоторого времени, и он теряет свое значение, когда он впервые обращается к нему.
просто добавить список клиентов для временных данных TempData.Add("Client",Client), а затем использовать его в действии Index, как TempData["Client"]

+0

Но если я это сделаю, он возвращает поисковый url .. и его не существует – MuriloKunze

+0

Я попытался создать два индекса действий (один со строковым параметром и другой без параметров), но он не работает: текущий запрос для Действие «Индекс» на тип контроллера «ClienteController» неоднозначно между следующими методами: – MuriloKunze

+0

Я решил, спасибо. – MuriloKunze

0

Привет, вы должны создать пользовательский ModelBinder для передачи пользовательских типов, как показано на этот вопрос: ASP.NET MVC controller actions with custom parameter conversion?

Он тогда рекомендую действительно хороший блог: ASP.NET MVC controller actions with custom parameter conversion?

Надеется, что это помогает

Смежные вопросы