Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ActionLink route values containing specific characters

I am using this action-link to send a route value id to controller but my id value like this config.xml and here is my action-link

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

The question is when I want to click this link browser understand this as a url that ends with config.xml

like this

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

and doesn't go to the controller it returns 404 - not found. How to prevent this from happening and make this config.xml as a parameter not as a file?

here is my route also

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

also i tried instead id ,filename but nothing changed

and here is my controller

[HttpGet]
        public ActionResult DeleteFile(string id)
        {
          return view("DeleteFile");
         }
like image 619
Younis Qadir Avatar asked Oct 20 '22 19:10

Younis Qadir


1 Answers

You can do it using this overload of Html.ActionLink() like this:

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

and Action:

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

From 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

like image 107
Ehsan Sajjad Avatar answered Oct 22 '22 08:10

Ehsan Sajjad