Хорошей идеей является использование «объектно-реляционного картографа», подобного Idiorm :
$user = ORM::for_table('user')
->where_equal('username', 'j4mie')
->find_one();
$user->first_name = 'Jamie';
$user->save();
$tweets = ORM::for_table('tweet')
->select('tweet.*')
->join('user', array(
'user.id', '=', 'tweet.user_id'
))
->where_equal('user.username', 'j4mie')
->find_many();
foreach ($tweets as $tweet) {
echo $tweet->text;
}
Он не только избавляет вас от SQL-инъекций, но и от синтаксических ошибок! Также поддерживает коллекции моделей с цепочкой методов для фильтрации или применения действий к нескольким результатам сразу и нескольких подключений.
Можно использовать атрибут, если Вы хотите, чтобы Ваш код сделал перегрузку.
[ActionName("MyOverloadedName")]
, Но, необходимо будет использовать различное название действия того же http метода (как другие сказали). Таким образом, это - просто семантика в той точке. У Вас было бы имя в Вашем коде или Вашем атрибуте?
Phil связали статью с этим: http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx
Насколько я знаю, что у Вас может только быть тот же метод при использовании различных http методов.
т.е.
[AcceptVerbs("GET")]
public ActionResult MyAction()
{
}
[AcceptVerbs("POST")]
public ActionResult MyAction(FormResult fm)
{
}
Да. Я был в состоянии сделать это путем установки HttpGet
/ HttpPost
(или эквивалентный AcceptVerbs
атрибут) для каждого метода контроллера к чему-то отличному, т.е. HttpGet
или HttpPost
, но не оба. Тем путем это может сказать на основе типа запроса который метод использовать.
[HttpGet]
public ActionResult Show()
{
...
}
[HttpPost]
public ActionResult Show( string userName )
{
...
}
Одно предложение, которое я имею, - то, что, для случая как это, должен был бы иметь частную реализацию, на которую оба из Ваших общедоступных Методов действия полагаются, чтобы не копировать код.
Извините за задержку. У меня была та же проблема, и я нашел ссылку с хорошими ответами, может ли это помочь новым парням
Все кредиты для веб-сайта BinaryIntellect и авторов
В основном, Есть четыре ситуации: с использованием разных глаголов , с использованием маршрутизации , маркировки перегрузки с атрибутом [NoAction] и изменяют имя атрибута действия с помощью [ActionName]
Итак, это зависит от ваших требований и вашей ситуации.
Однако перейдите по ссылке:
Ссылка: http://www.binaryintellect.net/articles/8f9d9a8f-7abf-4df6-be8a-9895882ab562.aspx
Чтобы решить эту проблему, вы можете написать ActionMethodSelectorAttribute
, который проверяет MethodInfo
для каждое действие и сравнивает его с опубликованными значениями формы, а затем отклоняет любой метод, для которого значения формы не совпадают (за исключением, конечно, имени кнопки).
Вот пример: - http://blog.abodit.com/2010/02/asp-net-mvc-ambiguous-match/
НО, это плохая идея.