重载控制器操作

Dav*_*Dev 9 c# asp.net-mvc action controller nullable

几分钟前,当我试图在我的一个控制器中重载一个Action时,我有点意外

我有

public ActionResult Get()
{
    return PartialView(/*return all things*/);
}
Run Code Online (Sandbox Code Playgroud)

我补充道

public ActionResult Get(int id)
{
    return PartialView(/*return 1 thing*/);
}
Run Code Online (Sandbox Code Playgroud)

......突然之间都没有工作

我通过使'id'可以为空并解除其他两种方法来解决这个问题

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

它工作,但我的代码有点难看!

有什么意见或建议吗?我是否必须在控制器上忍受这种瑕疵?

谢谢

戴夫

Mat*_*cey 4

正如您所发现的,您不能以这种方式超载操作。

具有相同名称的多个操作的唯一方法是它们响应不同的动词。

我认为使用一个方法来处理这两种情况是一种更干净的解决方案,并且允许您将逻辑封装在一个地方,而不是依赖于了解具有相同名称的多个用于不同目的的方法。- 当然,这是主观的,只是我的意见。

如果您确实想要有单独的方法,您可以对它们进行不同的命名,以便它们清楚地表明其不同的目的。例如:

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

public ActionResult Get(int id) 
{ 
    return PartialView(/*return 1 thing*/); 
} 
Run Code Online (Sandbox Code Playgroud)