MVC使动作链接执行提交

我目前正在尝试进行html提交,但是使用MVC辅助方法ActionLink,因为我不希望它是一个按钮,我希望它是一个带下划线的链接,就像我页面上的其余部分一样。 这就是我目前所拥有的

 

这会跳回到我的操作,但是所有已检出要删除的域都不会被回送。 (如果我使用它, 它工作正常,所以我知道提交或检索复选框没有问题)

这是我到目前为止所拥有的……

>“%>

指数

 

Domain List

| | **Delete Selected** |

dataKeys.Add(c => c.DomainId)).DataKeys(dataKeys => dataKeys.Add(c => c.Name)) .Columns(columns => { columns.Template(o => { %> { %> <input type='checkbox' checked="checked" id='' name='DeleteIds' value='' /> <input type='checkbox' id='' name='DeleteIds' value='' /> o.DomainId); columns.Bound(o => o.Name); columns.Bound(o => o.SiteId); columns.Bound(o => o.ScrubAndRedirect); columns.Bound(o => o.ReportingSiteId); columns.Bound(o => o.TrafficCopClass); columns.Bound(o => o.SiteName); columns.Bound(o => o.FeedType); columns.Bound(o => o.Active); }).Sortable().Filterable().DataBinding(db => db.Server().Select("Index", "Domains")).Render();%>

| |

** $(function() { $('.DeleteLink').click(function() { $(this).closest('form')[0].submit(); }); }); **

您无法在没有Javascript的情况下提交超链接提交表单。

使用jQuery,你可以写

 Delete Selected 

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

添加到SLaks,您可以通过使用以下内容确保您的jQuery代码在适当的时间(无论页面上的位置)触发:

  

通过将代码包装在$(document).ready(...)可以确保在页面加载完成之前代码不会运行。

您最好不要创建操作链接,而是编写客户端javascript代码,该代码将在单击链接时为您提交表单。

您可以使用jQuery在选择器上使用submit方法轻松使用jQuery来执行此操作:

 
Submit form

我看到的大多数答案都依赖于jQuery或做一些花哨的ajax提交,这不是我想要的。 所以我写了HtmlHelper扩展方法,用隐藏的输入和按钮创建普通的表单。 它正在进行中……仍然可以完成这项工作。 这是课程:

 public static class HtmlHelperExt { public static HtmlString PostLink(this HtmlHelper html, string text, string action, object routeValues) { var tbForm = new TagBuilder("form"); tbForm.MergeAttribute("method", "POST"); tbForm.MergeAttribute("action", action); var inputDict = HtmlHelper.ObjectToDictionary(routeValues); var inputs = new List(); foreach (var key in inputDict.Keys) { const string inputFormat = @""; var input = String.Format(inputFormat, key, html.Encode(inputDict[key])); inputs.Add(input); } var submitBtn = ""; inputs.Add(String.Format(submitBtn, text)); var innerHtml = String.Join("\n", inputs.ToArray()); tbForm.InnerHtml = innerHtml; // return self closing return new MvcHtmlString(tbForm.ToString()); } } 

要使用它,在Razor中你写道:

 @Html.PostLink("ButtonText", "/Controller/Action", new { id = item.Id, hello="world" }) 

结果,在HTML中你得到:

 

如果你使用bootstrap,要使按钮看起来像一个链接,只需添加btn-link类,例如

  

这可以通过在C#中调用javascript中的类来完成

  <%= Html.ActionLink("Delete Selected", "DeleteCheckBox", "Domains", "Default.aspx", new { class= "dosubmit" }) %> 

对于Razor语法

 @Html.ActionLink("Delete Selected", "Index", "IndexController", "null", new { @class= "dosubmit" }) 

然后调用Jquery做提交。

  

更新1#我们可以使用它的小解释。

  

转到原始问题MVC使动作链接执行提交
Index.cshtml示例chtml查看文件

 @using(Html.BeginForm("Index","ControllerName",FormMethod.Post)) { // Call another view  with bootstrap button class @Html.ActionLink("Submit something", "Index", "IndexController", "null", new { @class= "dosubmit btn btn-success" }) } // Perform a post submit method with same button  

我在Razor尝试了Summit的方法,但需要做出一些改变。 在操作链接中包含Controller的名称会导致页面绕过JQuery并直接提交表单。 所以,我尝试了以下方法:

 @using (Html.BeginForm())... @Html.ActionLink("ButtonText", "Action", null, null, new { @id = "ButtonID", @class = "btn btn-primary btn-sm" }) 

从那里我可以通过id访问按钮并使用onclick方法。

 $("#ButtonID").on("click", function (e) { url = $(this).attr('href'); // without Action in link url shows as // /Controller e.preventDefault(); // use this or return false // now we can do an Ajax submit; }); 

我应该补充一点,我希望提交表单,但不一定要转移到另一个页面和/或Action。