2012-05-01 5 views
2

У меня есть метод действияT4MVC и Html.BeginForm

[HttpPost] 
     public virtual ActionResult Search(string searchTerm) 
... 

И Форма

@using (Html.BeginForm(MVC.Products.Search(), FormMethod.Post)) 
     { 
      <input id="searchBox" name="searchTerm" type="text" /> 
      <input type="submit" value="Search" /> 
     } 

Но это не будет работать, Search() требует параметра SEARCHTERM, и я не знаю, как передать его ?

ответ

2

Вы можете передать нулевой:

@using (Html.BeginForm(MVC.Products.Search(null), FormMethod.Post)) 
+0

T4MVC всегда создает перегрузку, которая не принимает никаких параметров, поэтому я бы подумал, что ничего не прошло бы сработало бы. –

0

Проверьте файл T4MVC ProductsController.generated.cs для метода поиска(), который принимает нулевые параметры. Похоже, вы не найдете его там, но, как сказал Дэвид Эббо выше, он должен был быть создан в большинстве случаев. Это особенно странно, учитывая, что метод, который вы вставили здесь, украшен как виртуальный, что, вероятно, произошло в какой-то момент раньше, когда он был помечен T4MVC.

Для того, чтобы исправить ошибки, вы можете попытаться удалить файлы * .generated.cs и восстановить их, щелкнув правой кнопкой мыши файл T4MVC в VS IDE и выбрав «Запустить пользовательский инструмент».

Если метод zero-param все еще не сгенерирован, но другие, проверьте, что может быть необычным в вашем методе поиска. Возможно, вы делаете что-то неподдерживаемое T4MVC. Это случилось со мной сегодня для метода с возвратом строки. Мне пришлось либо использовать нулевой параметр взлома, либо вернуть ContentResult, согласно In MVC, how do I return a string result?, на который Дэвид любезно ссылался на T4MVC and Ajax method with parameter.

+0

Который, кстати, правильно установил заголовки и сделал другие приятные вещи. У меня нет необходимости в T4MVC для поддержки возврата строки. – shannon