我们都知道ASP.NET MVC中的url总是像example.com/controller/action?param1=value1¶m2=value2
我想知道有没有办法将动作名称放在查询字符串中,就像example.com/controller?aciton=index¶m1=value1¶m2=value2
一样(在查询字符串中注意 action = index ),然后制作ASP。 NET MVC将url路由到相应的控制器和动作。查询名称的名称可以是action
或其他名称。
--- 9月28日更新---
实际情况是我有一个表单,表单内部是一个带有单选按钮的表,每个列和表上方的一些按钮(创建,编辑,删除等)。这些按钮在同一个控制器中进行不同的操作。
作为搜索的结果,我得到了一些解决方案:
答案 0 :(得分:0)
我是提问者,在我更新问题几个小时后,我终于找到了解决方案。那是写一个自定义路线。
public class QueryActionRoute : Route
{
public QueryActionRoute(string url, object defaults) : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler()) { }
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var routeData = base.GetRouteData(httpContext);
var action = httpContext.Request["action"];
if (routeData != null)
{
if (!string.IsNullOrEmpty(action))
{
routeData.Values["action"] = action;
}
}
else
{
routeData = new RouteData()
{
Values = { {"action", "Index"} }
};
}
return routeData;
}
}
并替换默认路线
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(
"Default",
new QueryActionRoute(
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }));
}
}
之后,您可以通过
访问某个操作
example.com/home/about?param=value
(如果动作是“索引”,你可以发出动作名称),就像之前一样
或
example.com/home?action=about¶m=value
。
当您需要指定不同的按钮以在表单中执行不同的操作时,我真的很有帮助。你可以这样做:
<form action="@Url.Action("Index")">
<button name="action" value="Create">Create</button>
<button name="action" value="Details">Detail</button>
<button name="action" value="Edit">Edit</button>
<button name="action" value="Delete">Delete</button>
</form>