删除操作不工作MVC 3

时间:2012-02-18 04:03:45

标签: asp.net-mvc-3

我已定义的路线是:

    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
}

我注意到了几件事:

  1. 如果我通过我的电脑在本地运行相同的代码,删除工作正常,并且能够进入我的操作方法。我在IIS 7 / Win 7上运行

  2. 在我们的开发服务器上,它显然是通过IIS7设置的,但是这条路线失败了,并说它无法在我们的路由表上找到路由。但这是我在本地使用的SAME路由表类...所以为什么我会得到这个:

  3. 路由表中没有路由与提供的值匹配。

    但为什么这不适用于开发服务器?在我将本地设置与服务器进行比较时,我看到IIS中的设置大部分都是相同的。

    我注意到无论是本地主机还是服务器,如果我尝试在我的删除操作上放置[HttpDelete]属性,它就找不到我的动作方法,我得到一个错误,说它无法找到该方法。所以不确定为什么当我关闭它时,删除工作(仅限localhost)

5 个答案:

答案 0 :(得分:1)

使用帮助程序生成链接:

@Html.ActionLink("Delete", "Delete", "Car");

第一个参数是您的链接文本,第二个参数是您的操作方法名称,第三个参数是您的控制器名称。

请参阅this MSDN Reference on ActionLink()

答案 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帮助程序来解析本地环境的路径。