我很想知道人们如何处理以下情况。
假设我们有一个DataField,每个DataField可以有无限数量的DataValues
我们有2个控制器来处理这些对象的操作
现在,如果我们需要添加新的DataValue,我们需要知道CustomDataField的ID。将使用以下URL,
/CustomDataValue/Add/1
1 = DataField ID
但是,因为ASp.Net MVC引擎将参数名称绑定到模型(以下情况下的IE。我的DatValeu对象将替换其ID,当我实际尝试通过FieldID时)
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Site", action = "Home", id = UrlParameter.Optional } // Parameter defaults
);
我们如何处理这个问题?显然,执行以下操作无效。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Site", action = "Home", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{fieldid}", // URL with parameters
new { controller = "Site", action = "Home", fieldid = UrlParameter.Optional } // Parameter defaults
);
我认为这是一个常见问题,我暂时找不到明显的解决方案。如果签名是不同的,但两者都是/ String / String / Int
,那就没问题了==========================
这些路线怎么能起作用呢?
我必须添加3条路线吗?
答案 0 :(得分:5)
在这样的路线中使用约束:
routes.MapRoute(
"Default", // Route name
"CustomDataValue/{action}/{fieldid}", // URL with parameters
new { controller = "Site", action = "Home", fieldid = UrlParameter.Optional } // Parameter defaults
);
确保只有以“CustomDataValue”开头的网址才会调用此路由。它被声明为常量,与默认路由不同。确保在默认路由之前声明这些指定的路由。由于没有限制,所有网址都与之匹配。
<强>更新强>
我猜你必须使用像http://domain.com/CustomDataValue/Add/23之类的网址调用DataValueController方法。如果是这种情况,请使用以下路线:
routes.MapRoute(
"CustomData", // Route name
"CustomDataValue/{action}/{fieldid}", // URL with parameters
new { controller = "DataValue", action = "List", fieldid = UrlParameter.Optional } // Parameter defaults
);
如果在名为List / Add / Edit的DataValueController中有操作方法,这将有效。