CoffeeCode
CoffeeCode

Reputation: 4314

asp.net mvc actionlink difficulties

i have an actionlink in my view

<%= Html.ActionLink("action","controller") %>

the action has a [AcceptVerbs(HttpVerbs.Post)] atttribute, and the lactionlink doesn't work.

how to make it work by "POST"??

Upvotes: 2

Views: 1185

Answers (4)

Steven Pardo
Steven Pardo

Reputation: 440

an ActionLink is just creates an anchor tag

<a href="url">link text</a>

This is inherently a GET verb. To do a POST, you must wrap the actionlink inside a form tag and you can override the click function with some jQuery.

<% using (Html.BeginForm("action","controller"))
       { %>
   <%= Html.ActionLink("Link Text", "action","controller") %>
<% } %>

<script>
   $(document).ready(function() {

        $("a").click(function() {
            $(this).parents('form').submit();
            return false;
        });

    });
</script>

Upvotes: 3

LukLed
LukLed

Reputation: 31842

To post to an action I use this JavaScript function:

function postToUrl(path, params, method) 
{
    method = method || "post"; // Set method to post by default, if not specified.

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for (var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);

        form.appendChild(hiddenField);
    }

    document.body.appendChild(form);    // Not entirely sure if this is necessary
    form.submit();
}

It creates html form, so you don't have to create it in view code. this way you can use:

<button onclick="postToUrl('/Controller/Action');">Link</button>

Upvotes: 4

orip
orip

Reputation: 75437

Another option with no JS is to use a submit button instead of a link. The button can be styled into anything with CSS.

<%using (Html.BeginForm("action", "controller") {%>
  <button type="submit">text</button>
<%}%>

Upvotes: 0

JoseMarmolejos
JoseMarmolejos

Reputation: 1770

Sorry mate, can't be done: take a look at the accepted reply here Does Html.ActionLink() post the form data? and read a bit about the tag here http://www.w3schools.com/TAGS/tag_a.asp

Upvotes: 2

Related Questions