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)
它工作,但我的代码有点难看!
有什么意见或建议吗?我是否必须在控制器上忍受这种瑕疵?
谢谢
戴夫
正如您所发现的,您不能以这种方式超载操作。
具有相同名称的多个操作的唯一方法是它们响应不同的动词。
我认为使用一个方法来处理这两种情况是一种更干净的解决方案,并且允许您将逻辑封装在一个地方,而不是依赖于了解具有相同名称的多个用于不同目的的方法。- 当然,这是主观的,只是我的意见。
如果您确实想要有单独的方法,您可以对它们进行不同的命名,以便它们清楚地表明其不同的目的。例如:
public ActionResult GetAll()
{
return PartialView(/*return all things*/);
}
public ActionResult Get(int id)
{
return PartialView(/*return 1 thing*/);
}
Run Code Online (Sandbox Code Playgroud)