Перегрузка действий контроллера

Я был немного удивлен несколько минут назад, когда я пытался перегрузить Действие в одном из моих Контроллеров

Я имел

public ActionResult Get()
{
    return PartialView(/*return all things*/);
}

Я добавил

public ActionResult Get(int id)
{
    return PartialView(/*return 1 thing*/);
}

.... и внезапно ни один не работал

Я устранил проблему путем создания 'идентификатора' nullable и избавления от других двух методов

public ActionResult Get(int? id)
{
    if (id.HasValue)
        return PartialView(/*return 1 thing*/);
    else
        return PartialView(/*return everything*/);
}

и это работало, но мой код просто стал немного ужасным!

Какие-либо комментарии или предложения? Я должен жить с этим пятном на своих Контроллерах?

Спасибо

Dave

9
задан DaveDev 12 March 2010 в 05:34
поделиться

2 ответа

Вы не можете перегружать действия таким образом, как вы обнаружили.

Единственный способ иметь несколько действий с одинаковым именем - это если они отвечают на разные глаголы.

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

Если вы действительно хотите иметь отдельные методы, вы можете назвать их по-разному, чтобы они четко указывали на их различные цели. Например:

public ActionResult GetAll() 
{ 
    return PartialView(/*return all things*/); 
} 

public ActionResult Get(int id) 
{ 
    return PartialView(/*return 1 thing*/); 
} 
4
ответ дан 3 November 2019 в 07:13
поделиться

На мой взгляд, это действительно имеет смысл в том, что вы говорите, Дэйв. Если у меня, например, есть select, у которого есть возможность выбрать все или одну запись, я не хочу использовать для этого разные методы, а лучше иметь один метод с перегрузкой, как тот, который Дейв показывает в примере.

// MrW

1
ответ дан 3 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

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