Calling PostMethod from HTML.Actionlink



嗨,我对MVC还很陌生,正面临一个问题。

  • 我有一个视图,它列出了只有2列的所有国家
  • 我希望列标题可以点击,并且应该在点击时进行排序
  • 我已经展示了我的控制器&查看下面的代码,我希望当我点击列标题时,它应该击中用[HttpPost]装饰的Index操作方法
  • 当我点击标题链接页面时,只刷新而不点击Action方法,我希望它会点击

如有任何帮助,我们将不胜感激。

这是我的控制器代码

[HttpPost]公共ActionResult索引(字符串排序列){return视图(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;
}

这是我的看法

<%@ 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>

您不能使用Action链接命中post方法。如果你所做的只是在这里排序,你可以做的一件事是将你的发布方法更改为get并更改名称

代替

[HttpPost] 
public ActionResult Index(string sortcolumn) 

有类似的东西

public ActionResult Sort (string sortColumn)

并将您的操作链接指向Sort.

最新更新