net框架 - ASP.NET MVC ActionLink和post方法




asp net框架 (12)

任何人都可以告诉我如何使用ActionLink和POST方法将值提交给Controller?
我不想使用按钮。
我想它有jQuery的东西。


@Aidos有正确的答案,只是想澄清一下,因为它隐藏在@CodingWithSpike发表的评论中。

@Ajax.ActionLink("Delete", "Delete", new { id = item.ApkModelId }, new AjaxOptions { HttpMethod = "POST" })

ActionLink永远不会发布帖子。 它总是触发GET请求。


使用以下呼叫操作链接:

<%= Html.ActionLink("Click Here" , "ActionName","ContorllerName" )%>

要提交表单值,请使用:

 <% using (Html.BeginForm("CustomerSearchResults", "Customer"))
   { %>
      <input type="text" id="Name" />
      <input type="submit" class="dASButton" value="Submit" />
   <% } %>

它会将数据提交给客户控制器和CustomerSearchResults操作。


在Ajax.BeginForm中使用此链接

@Html.ActionLink(
    "Save", 
    "SaveAction", 
    null, 
    null, 
    onclick = "$(this).parents('form').attr('action', $(this).attr('href'));$(this).parents('form').submit();return false;" })

;)


如果您使用的是ASP MVC3,则可以使用Ajax.ActionLink(),它允许您指定可以设置为“POST”的HTTP方法。


您可以使用jQuery为所有按钮执行POST。 只要给他们相同的CssClass名称。

使用“返回false”; 在你的onclick javascript事件结束时,如果你想在文章后面做一个服务器端的RedirectToAction,否则返回视图。

剃刀代码

@using (Html.BeginForm())
{
    @Html.HiddenFor(model => model.ID) 
    @Html.ActionLink("Save", "SaveAction", "MainController", null, new { @class = "saveButton", onclick = "return false;" })
}

JQuery代码

$(document).ready(function () {
        $('.saveButton').click(function () {
            $(this).closest('form')[0].submit();
        });
    });

C#

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveAction(SaveViewModel model)
{
    // Save code here...

    return RedirectToAction("Index");
    //return View(model);
}

我使用以下代码完成了相同的问题:

@using (Html.BeginForm("Delete", "Admin"))
{
       @Html.Hidden("ProductID", item.ProductID)
       <input type="submit" value="Delete" />
}

我对这个问题的解决方案是相当简单的。 我有一个页面,通过整个电子邮件进行客户搜索,另一个通过部分搜索,部分拉取并显示列表,列表中有一个动作链接,指向一个名为GetByID的动作结果并传入ID

GetByID为选定的客户提取数据然后返回

return View("Index", model); 

这是post方法


这对我来说是一个难以解决的问题。 我如何在剃刀和html中构建动态链接,以便调用操作方法并将值或值传递给特定的操作方法? 我考虑了几个选项,包括一个自定义的html帮手。 我刚想出一个简单而优雅的解决方案。

风景

@model IEnumerable<MyMvcApp.Models.Product>

@using (Html.BeginForm()) {

     <table>
         <thead>
             <tr>
                 <td>Name</td>
                 <td>Price</td>
                 <td>Quantity</td>
            </tr>
        </thead>
        @foreach (Product p in Model.Products)
        {
            <tr>
                <td><a href="@Url.Action("Edit", "Product", p)">@p.Name</a></td>
                <td>@p.Price.ToString()</td>
                <td>@p.Quantity.ToString()</td>
            </tr>
         }
    </table>
}

行动方法

public ViewResult Edit(Product prod)
{
    ContextDB contextDB = new ContextDB();

    Product product = contextDB.Products.Single(p => p.ProductID == prod.ProductId);

    product = prod;

    contextDB.SaveChanges();

    return View("Edit");
}

这里的要点是,Url.Action不关心动作方法是GET还是POST。 它将访问任何一种方法。 您可以使用数据传递给操作方法

@Url.Action(string actionName, string controllerName, object routeValues)

routeValues对象。 我已经试过这个,它的工作原理。 不,你没有在技术上做一个帖子或提交表单,但如果routeValues对象包含你的数据,它不管是一个帖子还是一个get。 您可以使用特定的操作方法签名来选择正确的方法。


这是一个融入默认ASP.NET MVC 5项目的答案,我相信在UI中很好地完成我的样式目标。 表单使用纯JavaScript提交给一些包含表单。

@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
   <a href="javascript:document.getElementById('logoutForm').submit()">
      <span>Sign out</span>
   </a>
}

完全显示的用例是Web应用程序导航栏中的注销下拉列表。

@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
    @Html.AntiForgeryToken()

    <div class="dropdown">
        <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
            <span class="ma-nav-text ma-account-name">@User.Identity.Name</span>
            <i class="material-icons md-36 text-inverse">person</i>
        </button>

        <ul class="dropdown-menu dropdown-menu-right ma-dropdown-tray">
            <li>
                <a href="javascript:document.getElementById('logoutForm').submit()">
                    <i class="material-icons">system_update_alt</i>
                    <span>Sign out</span>
                </a>
            </li>
        </ul>
    </div>
}

遇到这种情况需要从搜索(索引)页面POST到结果页面。 我并不需要像维塔利所说的那样多,但它指出了我的正确方向。 我所要做的就是这样:

@using (Html.BeginForm("Result", "Search", FormMethod.Post)) {
  <div class="row">
    <div class="col-md-4">
      <div class="field">Search Term:</div>
      <input id="k" name="k" type="text" placeholder="Search" />
    </div>
  </div>
  <br />
  <div class="row">
    <div class="col-md-12">
      <button type="submit" class="btn btn-default">Search</button>
    </div>
  </div>
}

我的控制器有以下签名方法:

[HttpPost]
public async Task<ActionResult> Result(string k)

您不能使用ActionLink因为ActionLink呈现锚点<a>标记。
你可以使用jQuery AJAX文章
或者只需调用带有或不带有jQuery的表单的submit方法(这可能是非AJAX),也许在任何控件的onclick事件中都会引起你的幻想。





actionlink