我已定义的路线是:
map.Route(new Route("Cars/{id}/Delete",
new RouteValueDictionary(new { controller = "Car", action = "Delete"}),
new MvcRouteHandler()));
在我看来,我有:
<a href="/Car/@Model.Id/Delete">Delete</a>
运行时尝试向http://oursite/Car/122/Delete发送请求
此Car控制器中的删除操作如下所示:
public ActionResult Delete(int id)
{
//code is here
}
我注意到了几件事:
如果我通过我的电脑在本地运行相同的代码,删除工作正常,并且能够进入我的操作方法。我在IIS 7 / Win 7上运行
在我们的开发服务器上,它显然是通过IIS7设置的,但是这条路线失败了,并说它无法在我们的路由表上找到路由。但这是我在本地使用的SAME路由表类...所以为什么我会得到这个:
路由表中没有路由与提供的值匹配。
但为什么这不适用于开发服务器?在我将本地设置与服务器进行比较时,我看到IIS中的设置大部分都是相同的。
我注意到无论是本地主机还是服务器,如果我尝试在我的删除操作上放置[HttpDelete]属性,它就找不到我的动作方法,我得到一个错误,说它无法找到该方法。所以不确定为什么当我关闭它时,删除工作(仅限localhost)
答案 0 :(得分:1)
使用帮助程序生成链接:
@Html.ActionLink("Delete", "Delete", "Car");
第一个参数是您的链接文本,第二个参数是您的操作方法名称,第三个参数是您的控制器名称。
答案 1 :(得分:0)
请您分享View的代码。如何在视图中构建'a'标记?
关于[HttpDelete]属性,这意味着该方法需要HTTP'DELETE'请求。 'a'标记始终具有GET请求。 Please refer this link
答案 2 :(得分:0)
我想你回答了自己的问题。路由表中没有与您提供的值匹配的路由。您可以通过在Global.asax.cs文件中写入此代码来编写该路径:
public class Global : System.Web.HttpApplication
{
protected void Application_Start()
{
// Specify routes
RouteTable.Routes.Add(new Route
{
Url = "[controller]/[id]/[action]",
Default = new { controller = "Car" },
RouterHandler = typeof(MvcRouteHandler)
});
}
}
或者,您可以使用现有路线(我个人推荐)来使用Car控制器中的Delete功能。为此,请尝试将代码切换为:
<a href="/Car/Delete/@Model.Id">Delete</a>
答案 3 :(得分:0)
路线的第一个名字
map.Route("DeleteCar",new Route("Cars/{id}/Delete",
new RouteValueDictionary(new { controller = "Car", action = "Delete"}),
new MvcRouteHandler()));
然后
<a href="@Url.RouteUrl("DeleteCar",new{id=Model.Id})">Delete</a>
除非该链接进入警告界面,否则我强烈建议删除应该是POST,甚至是DELETE(我认为可以通过ajax设置)
答案 4 :(得分:0)
localhost和ourite之间的URL路径可能存在差异。路径“/Car/@Model.Id/Delete”是硬编码的,未解析,可能无法在所有环境中使用。如其他答案所示,使用@ Html.ActionLink或@ Url.RouteUrl等MVC帮助程序来解析本地环境的路径。