谁能告诉我我怎么能提交的价值对控制器使用ActionLink和员额的方法?
我不想使用按钮。
我猜有东西!

有帮助吗?

解决方案

因为这只是呈现一个锚ActionLink标签不能使用<a>。结果 您可以使用 jQuery的AJAX帖子。结果 或者只是调用窗体的提交方法有或没有的jQuery(这将是不AJAX),也许在任何控制需要你的想象的onclick事件。

其他提示

如果您使用ASP MVC3你可以使用一个Ajax.ActionLink(),即允许用户指定哪些你可以设置为“POST”。

一个HTTP方法

您可以使用jQuery来为所有的按钮做了POST。只要给他们同样的CssClass名称。

使用 “返回false;”在如果你想的帖子后做一个服务器端RedirectToAction JavaScript事件您的onclick结束,否则只返回视图。

剃刀代码

@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);
}

@Aidos有正确的答案只是想清楚,因为它是隐藏在他的职位由@CodingWithSpike所做的评论里。

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

下面是烤成默认的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>
}

在完全示出使用情况是在一个网络应用程序的导航栏注销下拉菜单。

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

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;" })

我对这个问题的解决方案是一个相当简单的。我有一个网页,做一个客户搜索一个由整个电子邮件和其他由局部,局部拉,并显示一个列表中的列表中有一个指向名为GetByID的ActionResult并通过在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对象包含您的数据,它不如果事POST或GET。可以使用特定的动作方法签名选择合适的方法。

我已经使用下面的代码做了同样的问题:

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

这是我对问题的解决方案。这是具有 2 个操作方法的控制器

public class FeedbackController : Controller
{
public ActionResult Index()
{
   var feedbacks =dataFromSomeSource.getData;
   return View(feedbacks);
}

[System.Web.Mvc.HttpDelete]
[System.Web.Mvc.Authorize(Roles = "admin")]
public ActionResult Delete([FromBody]int id)
{
   return RedirectToAction("Index");
}
}

在视图中我渲染构造以下结构。

<html>
..
<script src="~/Scripts/bootbox.min.js"></script>
<script>
function confirmDelete(id) {
  bootbox.confirm('@Resources.Resource.AreYouSure', function(result) {
    if (result) {
      document.getElementById('idField').value = id;
      document.getElementById('myForm').submit();
    }
  }.bind(this));
}
</script>

@using (Html.BeginForm("Delete", "Feedback", FormMethod.Post, new { id = "myForm" }))
{
  @Html.HttpMethodOverride(HttpVerbs.Delete)
  @Html.Hidden("id",null,new{id="idField"})
  foreach (var feedback in @Model)
  {
   if (User.Identity.IsAuthenticated && User.IsInRole("admin"))
   {
    @Html.ActionLink("Delete Item", "", new { id = @feedback.Id }, new { onClick = "confirmDelete("+feedback.Id+");return false;" })
   }
  }
...
</html>

Razor View 的景点:

  1. JavaScript 函数 confirmDelete(id) 当链接生成时调用 @Html.ActionLink 被点击;

  2. confirmDelete() 函数需要被单击的项目的 id。该项目是从 onClick 处理程序 confirmDelete("+feedback.Id+");return false; 注意处理程序返回 false 以防止默认操作 - 即获取目标的请求。 OnClick 作为替代方案,按钮的事件可以附加到列表中所有按钮的 jQuery(可能会更好,因为 HTML 页面中的文本会更少,并且数据可以通过 data- 属性)。

  3. 表格有 id=myForm, ,以便在 confirmDelete().

  4. 表格包括 @Html.HttpMethodOverride(HttpVerbs.Delete) 为了使用 HttpDelete 动词,作为标有 HttpDeleteAttribute.

  5. 在 JS 函数中,我确实使用了动作确认(在外部插件的帮助下,但标准确认也可以正常工作。不要忘记使用 bind() 在回电或 var that=this (无论你喜欢什么)。

  6. 表单有一个隐藏元素 id='idField'name='id'. 。所以在确认提交表格之前(result==true),隐藏元素的值设置为传递参数的值,浏览器将向控制器提交数据,如下所示:

请求网址:http://localhost:38874/Feedback/Delete

请求方式:POST 状态代码:302 找到

响应头

位置:/反馈主机:Local主机:38874表格数据 X-HTTP-方法覆盖:删除 id:5

如您所见,这是带有 X-HTTP-Method-Override:DELETE 且正文中的数据设置为“id:5”的 POST 请求。响应有 302 代码,该代码重定向到 Index 操作,通过此代码,您可以在删除后刷新屏幕。

我建议呆纯休息的原则和使用HTTP删除你的删除。不幸的是HTML前只有HTTP获取和职位。标记,只可以一个HTTP得到的。一个形式标记可以做一个HTTP获得或职位。幸运的是如果您使用的ajax你可以做一个HTTP删除,这是什么我建议。请参阅以下员额的详细信息: Http删除

调用$。员额(),因为它是基于Ajax将无法正常工作。这样的混合方法需要被用于此目的。

以下是其为我工作溶液中。

步骤: 1.创建href网址与网址和参数调用的方法 使用JavaScript方法2.呼叫正常POST

解决方案:

在.cshtml:

<a href="javascript:(function(){$.postGo( '@Url.Action("View")', { 'id': @receipt.ReceiptId  } );})()">View</a>

注意:匿名方法应包裹在(....)() 即

(function() {
    //code...
})();

<强> postGo 被定义为下面在JavaScript。 其余的是简单..

<强> @ Url.Action( “视图”)作为调用创建URL

<强> {“ID”:@ receipt.ReceiptId} 创建参数作为对象,它是在转转换为发布字段中postGo方法。这可以是任何参数作为您所需要

在JavaScript的:

(function ($) {
    $.extend({
        getGo: function (url, params) {
            document.location = url + '?' + $.param(params);
        },
        postGo: function (url, params) {
            var $form = $("<form>")
                .attr("method", "post")
                .attr("action", url);
            $.each(params, function (name, value) {
                $("<input type='hidden'>")
                    .attr("name", name)
                    .attr("value", value)
                    .appendTo($form);
            });
            $form.appendTo("body");
            $form.submit();
        }
    });
})(jQuery);

我已经用于postGo参考网址

非Ajax GET /使用jQuery POST(插件?)

http://nuonical.com/jquery-postgo-plugin/

jQuery.post() 如果有自定义的数据将正常工作。如果您想发表的存在形式,它更容易使用 ajaxSubmit()

和你不必设置在ActionLink本身此代码,因为你可以在document.ready()事件中使用的jQuery $(function(){ ... })特技附加链路处理器(这是一个优选的方法无论如何),例如

跨越此需要从搜索(索引页)张贴到结果页面来到。作为@Vitaliy说,但我指出了正确的方向,我并不需要那么多。所有我必须做的是这样的:

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

此,从MVC示例项目采取

@if (ViewBag.ShowRemoveButton)
      {
         using (Html.BeginForm("RemoveLogin", "Manage"))
           {
              @Html.AntiForgeryToken()
                  <div>
                     @Html.Hidden("company_name", account)
                     @Html.Hidden("returnUrl", Model.returnUrl)
                     <input type="submit" class="btn btn-default" value="Remove" title="Remove your email address from @account" />
                  </div>
            }
        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top