1

我在使用 asp.net mvc 预览版 5 的示例路由时遇到问题。

在 AccountController 我有 2 个动作:

public ActionResult Delete()  
public ActionResult Delete(string username)

在尝试查找 Account/Delete 或 Account/Delete?username=davide 时,ControllerActionInvoker 会抛出一个异常,指出删除请求在我的两个操作方法之间不明确。

global.asax 中的默认路由没有改变。

动作调用者不应该了解在参数列表中调用的方法是什么吗?

使用预览版 4,我在执行相同操作时没有遇到此类问题。

任何的想法?

4

4 回答 4

3

找到解决方案!

随着 ActionNameAttribute 的引入,现在需要根据请求手动过滤要调用的方法。这是由 ActionSelectionAttribute 完成的。

完整说明:http: //haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

于 2008-09-06T12:44:07.523 回答
0

我不能确定为什么会这样。但是您可能只想考虑使用 Delete(string username) 操作并删除无参数重载。

因为字符串可以为空,所以我的理解是简单地调用 Account/Delete 将调用带有 null 用户名参数的操作,然后您可以在操作方法的开头对其进行测试。

于 2008-09-06T10:45:15.187 回答
0

我要做的是放弃空白的 Delete(),只使用 Delete(string username)

在您的 url 路由中,您会有类似于 "/{Controller}/{Action}/{username}/" 的内容吗?如果您有“/{Controller}/{Action}/{Id}/”,那么最好执行 Delete(string id),这样只需使用 url 来处理此“/Account/Delete/davide/”

也就是说,使用您的默认路由,它应该类似于默认 ID 为“”

然后在您的 Delete(string id) 方法中有:

public ActionResult Delete(string id)
{
    if(string.IsNullOrEmpty(id)) return EmptyID();

    // Continue normal Delete method
}

public ActionResult EmptyID()
{
    // The method you were going to have on a blank delete.
}

或者只是将其包装在 if {} else {} 上的一个方法中

无论哪种方式,我都会使用一种方法,并在您的空字符串路由中对您的用户名/id 进行默认设置,然后以这种方式处理它。

如果您想与我联系以进一步跟进我的意思,或者有任何帮助,请在我的信息页面上通过 andrew@my domain 联系我。

编辑:嗯,Berko 说的差不多,我不确定命名属性会如何帮助 - 所以请在此处发表评论,为其他发现相同问题的人详细说明!:)

于 2008-09-08T05:01:31.033 回答
0

它是模棱两可的,因为这两个控制器操作是相同的 post 方法。您只能在表单发布场景中使用它,例如,您正在提交使用 HTTP post 的表单数据。

于 2008-12-22T17:51:59.750 回答