ActionLink路由包含特定字符的值

时间:2015-01-08 11:54:45

标签: c# razor actionlink routevalues

我正在使用此操作链接向路由器发送路由值id,但我的ID值为config.xml 这是我的行动链接

 @Html.ActionLink("Destroy", "DeleteFile", "Files", new { id = "config.xml"})

问题是,当我想点击此链接时,浏览器将其理解为以url

结尾的config.xml 像这样

http://localhost:12380/Files/DeleteFile/config.xml

并且不会返回到它返回404 - not found的控制器。 如何防止这种情况发生,并将此config.xml作为参数而不是文件?

这是我的路线

routes.MapRoute(
              name: "delete files",
              url: "Files/DeleteFile/{id}",
              defaults: new
              {
                  controller = "Files",
                  action = "DeleteFile",
                  id= UrlParameter.Optional
              }
            );

我也尝试了id ,filename,但没有改变

这是我的控制器

[HttpGet]
        public ActionResult DeleteFile(string id)
        {
          return view("DeleteFile");
         }

2 个答案:

答案 0 :(得分:3)

你可以使用this overload of Html.ActionLink()这样做:

@Html.ActionLink("Destroy", 
                "DeleteFile", 
                "Files", 
                new RouteValueDictionary { {"file", Url.Encode("config.xml")} }, 
                null)

和行动:

public ActionResult DeleteFile(string file)
{
  // delete logic here
  return View();
}

来自MSDN

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    RouteValueDictionary routeValues,
    IDictionary<string, Object> htmlAttributes
)

Here is a working DEMO Fiddle

答案 1 :(得分:0)

在这里,我找到答案,我们只需在/

的末尾添加config.xml

here is some answers