Действительно ли можно ли перегрузить методы контроллера в ASP.NET MVC?

Хорошей идеей является использование «объектно-реляционного картографа», подобного 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-инъекций, но и от синтаксических ошибок! Также поддерживает коллекции моделей с цепочкой методов для фильтрации или применения действий к нескольким результатам сразу и нескольких подключений.

322
задан Wayne Koorts 24 May 2015 в 16:24
поделиться

5 ответов

Можно использовать атрибут, если Вы хотите, чтобы Ваш код сделал перегрузку.

[ActionName("MyOverloadedName")]

, Но, необходимо будет использовать различное название действия того же http метода (как другие сказали). Таким образом, это - просто семантика в той точке. У Вас было бы имя в Вашем коде или Вашем атрибуте?

Phil связали статью с этим: http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

199
ответ дан JD Conley 23 November 2019 в 00:56
поделиться

Насколько я знаю, что у Вас может только быть тот же метод при использовании различных http методов.

т.е.

[AcceptVerbs("GET")]
public ActionResult MyAction()
{

}

[AcceptVerbs("POST")]
public ActionResult MyAction(FormResult fm)
{

}
14
ответ дан keeney 23 November 2019 в 00:56
поделиться

Да. Я был в состоянии сделать это путем установки HttpGet / HttpPost (или эквивалентный AcceptVerbs атрибут) для каждого метода контроллера к чему-то отличному, т.е. HttpGet или HttpPost, но не оба. Тем путем это может сказать на основе типа запроса который метод использовать.

[HttpGet]
public ActionResult Show()
{
   ...
}

[HttpPost]
public ActionResult Show( string userName )
{
   ...
}

Одно предложение, которое я имею, - то, что, для случая как это, должен был бы иметь частную реализацию, на которую оба из Ваших общедоступных Методов действия полагаются, чтобы не копировать код.

69
ответ дан tvanfosson 23 November 2019 в 00:56
поделиться

Извините за задержку. У меня была та же проблема, и я нашел ссылку с хорошими ответами, может ли это помочь новым парням

Все кредиты для веб-сайта BinaryIntellect и авторов

В основном, Есть четыре ситуации: с использованием разных глаголов , с использованием маршрутизации , маркировки перегрузки с атрибутом [NoAction] и изменяют имя атрибута действия с помощью [ActionName]

Итак, это зависит от ваших требований и вашей ситуации.

Однако перейдите по ссылке:

Ссылка: http://www.binaryintellect.net/articles/8f9d9a8f-7abf-4df6-be8a-9895882ab562.aspx

0
ответ дан 23 November 2019 в 00:56
поделиться

Чтобы решить эту проблему, вы можете написать ActionMethodSelectorAttribute , который проверяет MethodInfo для каждое действие и сравнивает его с опубликованными значениями формы, а затем отклоняет любой метод, для которого значения формы не совпадают (за исключением, конечно, имени кнопки).

Вот пример: - http://blog.abodit.com/2010/02/asp-net-mvc-ambiguous-match/

НО, это плохая идея.

15
ответ дан 23 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: