我在MVC 2中遇到了一些模糊动作方法的问题。我已经尝试实现这里找到的解决方案:ASP.NET MVC ambiguous action methods,但这只是给了我一个“找不到资源”的错误,因为它认为我正在尝试调用我 不 想要调用的操作方法。我正在使用的RequiredRequestValueAttribute类与其他问题的解决方案完全相同:
public class RequireRequestValueAttribute : ActionMethodSelectorAttribute
{
public RequireRequestValueAttribute(string valueName)
{
ValueName = valueName;
}
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
return (controllerContext.HttpContext.Request[ValueName] != null);
}
public string ValueName { get; private set; }
}
我的行动方法是:
//
// GET: /Reviews/ShowReview/ID
[RequireRequestValue("id")]
public ActionResult ShowReview(int id)
{
var game = _gameRepository.GetGame(id);
return View(game);
}
//
// GET: /Reviews/ShowReview/Title
[RequireRequestValue("title")]
public ActionResult ShowReview(string title)
{
var game = _gameRepository.GetGame(title);
return View(game);
}
现在,我正在尝试使用int id
版本,而是调用string title
版本。
答案 0 :(得分:2)
此解决方案假定您必须绝对使用相同的URL,无论您是按ID还是名称进行选择,并且您的路由设置为从URL向此方法传递值。
[RequireRequestValue("gameIdentifier")]
public ActionResult ShowReview(string gameIdentifier)
{
int gameId;
Game game = null;
var isInteger = Int32.TryParse(gameIdentifier, out gameId);
if(isInteger)
{
game = _gameRepository.GetGame(gameId);
}
else
{
game = _gameRepository.GetGame(gameIdentifier);
}
return View(game);
}
更新:根据Microsoft:“操作方法不能基于参数重载。当使用NonActionAttribute或AcceptVerbsAttribute等属性消除歧义时,可以重载操作方法。” p>