C# MVC 5 HTML表单提交未触发

C# MVC 5 HTML表单提交未触发,c#,html,razor,asp.net-mvc-5,C#,Html,Razor,Asp.net Mvc 5,我一直在关注一本名为Pro ASP.net的书,遇到了一个相当奇怪的问题。我有一个链接到控制器的Razor视图,在该视图上我使用@Html.BeginForm()。但是,当表单包含除提交按钮以外的任何内容时,它不会提交。如果我只在@Html.BeginForm中使用按钮,视图将很好地转到我的控制器。但是当我把表单的其余内容放进去时,当我点击提交按钮时,什么也没有发生 视图中的相关HTML @using (Html.BeginForm("EditContact", "EditContact"))

我一直在关注一本名为Pro ASP.net的书,遇到了一个相当奇怪的问题。我有一个链接到控制器的Razor视图,在该视图上我使用
@Html.BeginForm()
。但是,当表单包含除提交按钮以外的任何内容时,它不会提交。如果我只在
@Html.BeginForm
中使用按钮,视图将很好地转到我的控制器。但是当我把表单的其余内容放进去时,当我点击提交按钮时,什么也没有发生

视图中的相关HTML

@using (Html.BeginForm("EditContact", "EditContact"))
{
    <div class="container">
        @Html.HiddenFor(m => m.Id)
        @foreach (var property in ViewData.ModelMetadata.Properties)
        {
            if (property.PropertyName != "Id")
            {
                <div class="form-group">
                    <label>@(property.DisplayName ?? property.PropertyName)</label>
                    @Html.TextBox(property.PropertyName, Model.GetPropertyValue(property.PropertyName), new {@class = "form-control"})
                    @Html.ValidationMessage(property.PropertyName)
                </div>
            }
        }
        <div class="row">
            <div class="col-md-1">
                <button type="submit" class="btn btn-primary">Save</button>
            </div>
            <div class="col-md-1">
                @Html.ActionLink("Cancel", "Cancel", null, new {@class="btn btn-default"})
            </div>
        </div>
    </div>
}

您尚未指定按钮的类型。默认类型是
按钮
,它自己不做任何事情。您需要的是
提交

<button type="submit" class="btn btn-primary">Save</button>
保存

您尚未指定按钮的类型。默认类型是
按钮
,它自己不做任何事情。您需要的是
提交

<button type="submit" class="btn btn-primary">Save</button>
保存

结果证明,
@Html.HiddenFor(…)
是罪魁祸首!为什么我不确定(特别是因为我编写的另一个应用程序使用它工作得很好),但删除它会使一切正常工作。

结果是
@Html.HiddenFor(…)
是罪魁祸首!为什么我不确定(特别是因为我编写的另一个应用程序使用它工作得很好),但是删除它会使一切正常工作。

我想你忘了在你的BeginForm中添加post方法。我认为像下面这样编辑代码可能会很好。并检查是否有任何标签错位

@using (Html.BeginForm("EditContact", "EditContact",FormMethod.Post))

我想你忘了在你的邮件中添加post方法。我认为像下面这样编辑代码可能会很好。并检查是否有任何标签错位

@using (Html.BeginForm("EditContact", "EditContact",FormMethod.Post))

我刚试过,但结果还是一样的。如果我从容器中移除除按钮及其行以外的所有内容,它将正常工作,并调用相应的函数。如果我把所有的东西都加进去,那就什么都没有了。你在控制台里有错误吗?还要检查呈现的代码。浏览器工具对这些烦恼很有用。我检查过了,控制台上没有显示任何东西。。。尝试删除/重新创建控制器和视图,但不幸的是,这也没有起到任何作用。您的_布局中或显示的代码上方有任何表单吗?如果它在删除所有其他内容的情况下工作,请尝试一次添加1个内容。是不是在取消行动?我想我可能找到了凶手。删除
@Html.HiddenFor(…)
行可使其正常运行。。。这是一个问题,就像我正在做的一样,我需要在属性返回后访问该属性,但不希望用户能够编辑/触摸它。只是尝试了一下,但最终得到了相同的结果。如果我从容器中移除除按钮及其行以外的所有内容,它将正常工作,并调用相应的函数。如果我把所有的东西都加进去,那就什么都没有了。你在控制台里有错误吗?还要检查呈现的代码。浏览器工具对这些烦恼很有用。我检查过了,控制台上没有显示任何东西。。。尝试删除/重新创建控制器和视图,但不幸的是,这也没有起到任何作用。您的_布局中或显示的代码上方有任何表单吗?如果它在删除所有其他内容的情况下工作,请尝试一次添加1个内容。是不是在取消行动?我想我可能找到了凶手。删除
@Html.HiddenFor(…)
行可使其正常运行。。。这是一个问题,就像我正在做的事情一样,我需要在它返回后访问该属性,但不希望用户能够编辑/触摸它。我刚开始工作,所以我想我应该试一试。我将BeginForm更改为添加Post方法,并将
@Html.HiddenFor(…)
行放回。与以前一样,当包含“@Html.HiddenFor(…)行时,单击Submit按钮时,即使添加了Post方法,也不会发生任何事情。不过,谢谢你的建议!我刚上班,所以我想试试看。我将BeginForm更改为添加Post方法,并将
@Html.HiddenFor(…)
行放回。与以前一样,当包含“@Html.HiddenFor(…)行时,单击Submit按钮时,即使添加了Post方法,也不会发生任何事情。不过,谢谢你的建议!