Call an Action using Ajax.ActionLink does not work

724 views Asked by At

I have a really weirdo issue, I write :

@Ajax.RawActionLink(
    "<i class=\"fa fa-print\"></i>",
    "CustomerOrder",
    "PrintSheet",
    new AjaxOptions()
    {
        UpdateTargetId = "bodyContent",
        InsertionMode = InsertionMode.Replace,
        HttpMethod = "GET"
    },
    new
    {
        @class = "btn btn-success",
        data_toggle = "tooltip",
        data_placement = "top",
        title = "Imprimer"
    })

but I get :

<a class="btn btn-success"
  data-ajax="true"
  data-ajax-method="GET"
  data-ajax-mode="replace"
  data-ajax-update="#bodyContent"
  data-placement="top"
  data-toggle="tooltip"
  href="/Sales/CustomerOrder?Length=10"
  title=""
  data-original-title="Imprimer">
    <i class="fa fa-print"></i>
</a>

in the rendered Html.

I'm calling the print CustomerOrder action from another controller but I get always the current controller in the path, any idea ?

Ps: I'm using an extension of Ajax ActionLink

        public static MvcHtmlString RawActionLink(this AjaxHelper ajaxHelper, string linkText, string actionName, string controllerName, AjaxOptions ajaxOptions, object htmlAttributes)
    {
        var repID = Guid.NewGuid().ToString();
        var lnk = ajaxHelper.ActionLink(repID, actionName, controllerName, ajaxOptions, htmlAttributes);
        return MvcHtmlString.Create(lnk.ToString().Replace(repID, linkText));
    }
1

There are 1 answers

0
serhiyb On

Assuming that RawActionLink is wrapped around ActionLink it seems that you are targeting wrong overloaded method. Try:

@Ajax.RawActionLink(
    "<i class=\"fa fa-print\"></i>", //content
    "CustomerOrder", //action
    "PrintSheet", //controller
    new {}, //routing data <---- ADDED
    new AjaxOptions() //ajax options
    {
        UpdateTargetId = "bodyContent",
        InsertionMode = InsertionMode.Replace,
        HttpMethod = "GET"
    },
    new //html attributes
    {
        @class = "btn btn-success",
        data_toggle = "tooltip",
        data_placement = "top",
        title = "Imprimer"
    })

https://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxextensions.actionlink(v=vs.118).aspx#M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink%28System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object%29