zer*_*kms 22 asp.net-mvc routing
我有这套路线:
routes.MapRoute(
"IssueType",
"issue/{type}",
new { controller = "Issue", action = "Index" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
这是控制器类:
public class IssueController : Controller
{
public ActionResult Index()
{
// todo: redirect to concrete type
return View();
}
public ActionResult Index(string type)
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么,当我请求http:// host/issue i时,The current request for action 'Index' on controller type 'IssueController' is ambiguous between the following action methods:
我希望第一个方法应该在没有参数时起作用,第二个方法在指定某个参数时起作用.
我哪里弄错了?
UPD:可能重复:你能在ASP.NET MVC中重载控制器方法吗?
UPD 2:由于上面的链接 - 没有任何合法的方法来进行动作重载,是吗?
UPD 3:基于参数(c)不能重载动作方法http://msdn.microsoft.com/en-us/library/system.web.mvc.controller%28VS.100%29.aspx
Tom*_*mmy 11
我会有一个Index方法来查找有效的类型变量
public class IssueController : Controller
{
public ActionResult Index(string type)
{
if(string.isNullOrEmpty(type)){
return View("viewWithOutType");}
else{
return View("viewWithType");}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
如何在这篇文章StackOverflow中创建一个查找特定请求值的自定义属性
[RequireRequestValue("someInt")]
public ActionResult MyMethod(int someInt) { /* ... */ }
[RequireRequestValue("someString")]
public ActionResult MyMethod(string someString) { /* ... */ }
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; }
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了类似的情况,如果我指定了ID,我希望我的"索引"动作来处理渲染.我遇到的解决方案是使Index方法的ID参数可选.例如,我最初尝试过两者:
public ViewResult Index()
{
//...
}
// AND
public ViewResult Index(int entryId)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
我只是将它们组合起来并改为:
public ViewResult Index(int entryId = 0)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30534 次 |
| 最近记录: |