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来执行此操作:
我看到的大多数答案都依赖于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。