2010-02-03 2 views
2

У меня есть некоторые проблемы при переходе идентификатор из URL в мой контроллер действийASP.NET MVC и передача ID сильно набраны BeginForm

Допустим, у меня есть этот URL: Bing/Index/4

В моей master page Я хотел бы сгенерировать форму, которая отправляется в BingController SearchAction. Я сделал что-то вроде этого

using(Html.BeginForm<BingController>(action => action.Search(id)))

Как получить идентификатор (4 в этом примере) от URL, чтобы передать его в поисковом действие?

Спасибо за вашу помощь

ответ

3

Чтобы получить доступ к этим данным в главной странице, контроллерам нужно добавить его к ViewData поэтому главная страница имеет доступ к нему.

public ActionResults Index(string id) 
{ 
    ViewData["SearchID"] = id; 

    return View(); 
} 

Затем в мастер-странице, вы можете получить доступ к нему в ViewData

using (Html.BeginForm("Search", "Bing", { id = ViewData["SearchID"] }) 

Для сильно типизированных, у меня есть класс BaseModel, который имеет свойства, что потребности мастер страницы и все мои другие модели наследуют базовый класс. Что-то вроде этого ...

public class BaseModel 
{ 
    prop string SearchID {get;set;} 
} 

public class HomeIndexModel : BaseModel 
{ 

} 

public ActionResults Index(string id) 
{ 
    HomeIndexModel model = new HomeIndexModel(); 
    model.SearchID = id; 

    return View(model); 
} 

Ваш мастер-страница будет выглядеть следующим образом:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<BaseModel>" %> 

<% using(Html.BeginForm<BingController>(action => action.Search(Model.SearchID))) { %> 
+0

Спасибо, это работает как шарм. Является ли эта доблесть только для MasterPage или для обычных страниц? –

+0

Он будет работать для каждой страницы, а также для частичного просмотра. –

+0

Да, на самом деле я хотел знать, нужно ли это делать со страничным или частичным представлением. Кажется, что asp привязывает идентификатор автоматически к параметру действия, когда он используется на странице. –