在重载的ActionResults上出现模糊错误?

时间:2017-09-06 13:34:45

标签: c# asp.net-mvc

我有两个ActionResults,一个接受一个参数,一个接受两个参数。当调用ActionResult传入一个参数时,我得到一个错误,即ActionResult在两者之间是不明确的。

为什么会这样?

public ActionResult Edit_ClockGroup(int id)
{
    var vm = new ClockGroupViewModel();
    vm = DAL.GetClockGroupDetail(id);

    return View(vm);
}


public ActionResult Edit_ClockGroup(int id, int readerId)
{
    var vm = new ClockGroupViewModel();
    vm = DAL.GetClockGroupDetail(id, readerId);

    return View(vm);            
}

我想我可以使用带有两个参数的ActionResult,然后使用默认值设置可选参数但是据我所知,我试图理解为什么当有两个不同的ActionResults接受不同的参数时这会是不明确的?

2 个答案:

答案 0 :(得分:1)

您遇到了路由冲突,因为很可能您使用的是基于默认约定的路由{controller}/{action}/{id},它可以匹配相关操作。

您需要唯一地区分这些操作以避免路由冲突。您可以更改操作名称或创建一个考虑所有必需参数的新路径。

答案 1 :(得分:1)

这似乎是一种丑陋的方式,但你可以将这两种行为结合起来

public ActionResult Edit_ClockGroup(int id, int? readerId = null)
{
    var vm = readerId.HasValue 
        ?  DAL.GetClockGroupDetail(id, readerId)
        :  DAL.GetClockGroupDetail(id);

    return View(vm);            
}