sherebiah.tishbi
sherebiah.tishbi

Reputation: 17

Calling PostMethod from HTML.Actionlink

Hi I am fairly new to MVC and facing a issue.

Any help would be appreciated.

Here is my controller code

[HttpPost] public ActionResult Index(string sortcolumn) { return View(SortedList(sortcolumn)); }

private List<Country> SortedList(string sortcol)
{
    List<Country> sortedlist = new List<Country>();
    switch (sortcol)
    {
        case "idCountry":
            if ((SortOrder)ViewData["sortorder"] == SortOrder.Ascending)
            {
                sortedlist = db.Countries.OrderByDescending(c => c.idCountry).ToList<Country>();
                ViewData["sortorder"] = SortOrder.Descending;
            }
            else
            {
                sortedlist = db.Countries.OrderBy(c => c.idCountry).ToList<Country>();
                ViewData["sortorder"] = SortOrder.Ascending;
            }
            break;
        case "Countryname":
            if ((SortOrder)ViewData["sortorder"] == SortOrder.Ascending)
            {
                sortedlist = db.Countries.OrderByDescending(c => c.Countryname).ToList<Country>();
                ViewData["sortorder"] = SortOrder.Descending;
            }
            else
            {
                sortedlist = db.Countries.OrderBy(c => c.Countryname).ToList<Country>();
                ViewData["sortorder"] = SortOrder.Ascending;
            }
            break;
    }
    return sortedlist;
}

Here is my view

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<eduSmart.Data.Entities.Country>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        List of Countries</h2>
    <p>
        Manage list of countries on this page. You can choose your action creating, editing,
        removing the country data.
    </p>
    <% using (Html.BeginForm("Index","Country")) { %>
    Total Countries : <%: Model.Count() %>
    <table>
        <tr>
            <th>
                <%: Html.ActionLink("CountryID","Index",new { sortcolumn = "CountryID" }) %>
            </th>
            <th>
                <%: Html.ActionLink("CountryName ", "Index", new { sortcolumn = "CountryName" })%>
            </th>
            <th>
            </th>
        </tr>
        <% if (Model != null)
           {  %>
        <% foreach (var item in Model)
       { %>
        <tr>
            <td>
                <%: item.idCountry%>
            </td>
            <td>
                <%: item.Countryname%>
            </td>
            <td>
                <%: Html.ActionLink("Edit", "Edit", new { id = item.idCountry })%>
                |
                <%: Html.ActionLink("Details", "Details", new { id = item.idCountry })%>
                |
                <%: Html.ActionLink("Delete", "Delete", new { id = item.idCountry })%>
            </td>
        </tr>
        <% }
           }%>
    </table>
    <%} %>
    <p>
        <%: Html.ActionLink("Create New", "Create") %>
    </p>
</asp:Content>

Upvotes: 0

Views: 1601

Answers (1)

Forty-Two
Forty-Two

Reputation: 7605

You can't hit a post method with an Action link. One thing you could do, if all you're doing is sorting here, is change your post method to a get and change the name

Instead of

[HttpPost] 
public ActionResult Index(string sortcolumn) 

Have something like

public ActionResult Sort (string sortColumn)

And point your actionlink to Sort.

Upvotes: 1

Related Questions