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将调用带有空的用户名参数的操作,然后您可以在操作方法的开始处测试该操作。
我会做的是沟空白删除(),并且只能使用删除(用户名字符串)
在你的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说,我不知道名称属性如何帮助 - 所以请在这里发表评论,详细说明它为其他人找到相同的问题! :)
您是否收到我建议的邮件? – 2008-09-17 11:45:05
其含糊不清,因为两个控制器的行动是相同的后期方法.. 你只能用在表单发布的情况下,例如你提交的表单数据使用HTTP POST ..
Berko,这不是我想要的。 这两个操作方法执行不同的操作。在方法开始时测试参数真的不是正确的方式...太脏了。会找出别的东西。无论如何感谢 – 2008-09-06 11:33:18