我有一些行动:
public partial class MyController : Controller
{
public ActionResult Action1()
{
}
public ActionResult Action2(int id)
{
}
public ActionResult Action3(string id)
{
}
public ActionResult Action4(string name)
{
}
}
我是否需要为每个操作设置注册路由:
routes.MapRoute("r1", "{controller}/{action}/{id}", new { id = UrlParameter.Optional });
routes.MapRoute("r2", "{controller}/{action}/{name}", new { name = UrlParameter.Optional });
或者有一些方法可以为所有操作注册一个模式路由,或者我需要某种“黑客”?
答案 0 :(得分:1)
类似的网址应该使用类似的路线。因此,在这种情况下,您只有一个网址格式为/controller/action/someid
。所以只需使用默认路由:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
然后更新您的操作:
public partial class MyController : Controller
{
public ActionResult Action1()
{
}
public ActionResult Action2(int id)
{
}
public ActionResult Action3(string id)
{
}
public ActionResult Action4(string name)
{
}
}
就最后一个操作而言,name
参数可以作为查询字符串传递。如果您确实坚持将其作为路径的一部分,则可以将其重命名为id
。最好将任意字符串(如名称)作为查询字符串参数传递,而不是作为URL路径的一部分传递。
答案 1 :(得分:0)
您无需注册这些额外的网址参数...... 如果您创建一个包含3个输入控件的表单并为其指定名称,则可以使用与输入控件相同的名称进行操作。他们将被魔术填补。
如果使用强类型视图,您甚至可以传递模型输入:
public class customer
{
public int Id { get;set;}
public string Name {get;set}
public string LastName {get;set;}
}
在您的控制器中:
public ActionResult UpdateCustomer(Customer customer)
{
// Add update logic
}