Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC使操作链接执行提交_C#_Asp.net Mvc_Actionlink - Fatal编程技术网

C# MVC使操作链接执行提交

C# MVC使操作链接执行提交,c#,asp.net-mvc,actionlink,C#,Asp.net Mvc,Actionlink,我目前正在尝试进行html提交,但是使用MVC助手方法ActionLink,因为我不希望它是一个按钮,我希望它像我页面上的其他链接一样是一个带下划线的链接。这就是我目前拥有的 <%= Html.ActionLink("Delete Selected", "DeleteCheckBox", "Domains", "Default.aspx", new { type="submit" }) %> 这跳回到我的操作罚款,但所有被选中删除的域不会被发回。(如果我使用此选项,效果很好,因

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

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

这跳回到我的操作罚款,但所有被选中删除的域不会被发回。(如果我使用此选项,
效果很好,因此我知道提交或检索复选框没有问题)

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

>" %> 指数

域列表

|  
| ****
| 

dataKeys.Add(c=>c.DomainId)).dataKeys(dataKeys=>dataKeys.Add(c=>c.Name)) .列(列=> { columns.Template(o=> { %> { %> o、 域名); 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();%%> | |

** $(函数(){ $('.DeleteLink')。单击(函数(){ $(this).closest('form')[0].submit(); }); }); **

如果没有Javascript,则无法使超链接提交表单

使用jQuery,您可以编写

<a href="javascript:void(0)" class="DeleteLink">Delete Selected</a>

与其创建一个动作链接,不如编写客户端javascript代码,在单击链接时为您提交表单

您可以使用选择表单的选择器上的来轻松执行此操作:

<form id="myForm">
   <!-- Other form inputs -->
   <a id="myFormSubmit" href="#">Submit form</a>
</form>

<script>
    // Assuming you have jQuery loaded.
    $(document).ready(function() {
        // Can load the results of the selector 
        // for the form here.
        // No need to load it every time in the
        // event handler.
        // Even though more often than not the
        // form will cause a reload of the page
        // if you are using the jQuery form validation
        // plugin, you could end up calling the click
        // event repeatedly.
        var myForm = $("#myForm");

        // Add the event handler for the link.
        $("#myFormSubmit").click(function() {
            // Submit the form.
            myForm.submit();

            // Return false, don't want
            // default click action to take place.
            return false;
        });
    });

</script>

//假设已加载jQuery。
$(文档).ready(函数(){
//可以加载选择器的结果
//这里的表格。
//无需每次在中加载它
//事件处理程序。
//尽管通常情况下
//表单将导致重新加载页面
//如果您使用的是jQuery表单验证
//插件,你可以调用点击
//事件反复发生。
var myForm=$(“#myForm”);
//为链接添加事件处理程序。
$(“#myFormSubmit”)。单击(函数(){
//提交表格。
myForm.submit();
//返回false,不需要
//要执行的默认单击操作。
返回false;
});
});

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

<script type="text/javascript">
   $(document).ready(function(){
      $('.DeleteLink').click(function() { 
         $(this).closest('form')[0].submit();
       });
   });
</script>
@using (Html.BeginForm())...
@Html.ActionLink("ButtonText", "Action", null, null, new { @id = "ButtonID", 
@class = "btn btn-primary btn-sm" })

$(文档).ready(函数(){
$('.DeleteLink')。单击(函数(){
$(this).closest('form')[0].submit();
});
});

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

我看到的大多数答案都依赖于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<string>();
        foreach (var key in inputDict.Keys)
        {
            const string inputFormat = @"<input type='hidden' name='{0}' value='{1}' />";

            var input = String.Format(inputFormat, key, html.Encode(inputDict[key]));
            inputs.Add(input);
        }

        var submitBtn = "<input type='submit' value='{0}'>";
        inputs.Add(String.Format(submitBtn, text));

        var innerHtml = String.Join("\n", inputs.ToArray());
        tbForm.InnerHtml = innerHtml;

        // return self closing
        return new MvcHtmlString(tbForm.ToString());
    }
}
因此,在HTML中,您可以得到:

<form action="/Controller/Action" method="POST">
    <input type="hidden" name="id" value="1">
    <input type="hidden" name="hello" value="world">
    <input type="submit" value="ButtonText">
</form>

如果使用引导,要使按钮看起来像链接,只需添加btn链接类,例如

<input type="submit" name="ActionType" value="Edit" class="col-md-1 btn btn-link" />

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

然后调用Jquery进行提交

<script type="text/javascript">
$(function() {
    $('dosubmit').click(function(e) {
        e.preventDefault();
        $(this).parents('form').first().submit();
    });
});
</script>

$(函数(){
$('dosubmit')。单击(函数(e){
e、 预防默认值();
$(this.parents('form').first().submit();
});
});
更新1# 很少解释我们在哪里可以使用这个

<input type="submit" name="dosubmit" value="Submit something" />

转到原始问题MVC使操作链接执行提交
Index.cshtml示例chtml视图文件

@using(Html.BeginForm("Index","ControllerName",FormMethod.Post))
{
   //  Call another view  <a></a> 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
<script type="text/javascript">
$(function() {
    $('dosubmit').click(function(e) {
        e.preventDefault();
        $(this).parents('form').first().submit();
    });
});
</script>
@使用(Html.BeginForm(“Index”、“ControllerName”、FormMethod.Post))
{
//使用引导按钮类调用另一个视图
@ActionLink(“提交某物”、“索引”、“索引控制器”、“空”,新建{@class=“dosubmit btn btn success”})
}
//使用相同的按钮执行提交后方法
$(函数(){
$('dosubmit')。单击(函数(e){
e、 预防默认值();
$(this.parents('form').first().submit();
});
});

我在Razor中尝试了上面Summit的方法,但需要进行一些更改。在操作链接中包含控制器的名称导致页面绕过JQuery并直接提交表单。因此,我尝试了以下方法:

<script type="text/javascript">
   $(document).ready(function(){
      $('.DeleteLink').click(function() { 
         $(this).closest('form')[0].submit();
       });
   });
</script>
@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;

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

我是以其他方式完成的 我把链接放在表单标签里面 并通过链接提交表格

<form  id="formid" action=  >  http="javascript:document.getElementById("formId".submit()"
</form>
http=“javascript:document.getElementById(“formId.submit()”)

我应该将jQuery语句放在哪里?直接放在视图中还是为它创建一个单独的javascript文件?另外,这是否知道将表单提交到哪个操作?(对不起,我没有太多使用jQuery或javascript)您可以将它放在视图中的
标记中。
$(this).closest('form'))
将找到最里面的
标记,该标记包含单击的元素。因此,它将提交包含链接的表单。我已将这些行添加到我的视图中,当我单击链接时,什么都不会发生。a href链接位于表单内部,函数位于结束标记之前(将其置于此ta之外)
@using (Html.BeginForm())...
@Html.ActionLink("ButtonText", "Action", null, null, new { @id = "ButtonID", 
@class = "btn btn-primary btn-sm" })
$("#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;

 });
<form  id="formid" action=  >  http="javascript:document.getElementById("formId".submit()"
</form>