ASP.NET MVC预览5路由歧义

问题描述:

我有一个示例路由与asp.net mvc的预览5的问题。ASP.NET MVC预览5路由歧义

在的AccountController我有2个动作:

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

在试图寻找帐户/删除或帐户/删除用户名=达维德的ControllerActionInvoker抛出一个异常说,删除的要求就是我拖动作之间暧昧?方法。

global.asax中的默认路由尚未更改。

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

使用预览4我没有这些类型的问题执行相同的操作。

有什么想法?

找到解决方案!

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

充分说明在这里:http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

我不能肯定地说为什么会发生这种情况。但是您可能只想考虑使用Delete(字符串用户名)操作并删除无参数重载。

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

+0

Berko,这不是我想要的。 这两个操作方法执行不同的操作。在方法开始时测试参数真的不是正确的方式...太脏了。会找出别的东西。无论如何感谢 – 2008-09-06 11:33:18

我会做的是沟空白删除(),并且只能使用删除(用户名字符串)

在你的URL路由你有类似的东西“/{Controller}/{Action}/{username} /“? 如果你有“/ {Controller}/{Action}/{Id} /”,你最好使用Delete(字符串id),这样只需使用url来处理这个“/ Account/Delete/davide /”

这就是说用你的默认路由应该是这样的默认密码是“”

在你删除(字符串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 {}

无论哪种方式,我只是要与上e方法并在你的空字符串的路由中对你的用户名/ id进行默认处理,并以这种方式处理它。

如果您想与我联系,进一步了解我的意思,或者任何可以帮助的事情,请在我的信息页上通过andrew @我的域名与我联系。

编辑:啊,无论如何Berko说,我不知道名称属性如何帮助 - 所以请在这里发表评论,详细说明它为其他人找到相同的问题! :)

+0

您是否收到我建议的邮件? – 2008-09-17 11:45:05

其含糊不清,因为两个控制器的行动是相同的后期方法.. 你只能用在表单发布的情况下,例如你提交的表单数据使用HTTP POST ..