MVC 5 HTML表单提交未触发

时间:2017-07-13 17:23:40

标签: c# html razor asp.net-mvc-5

我一直在关注一本名为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>
}

连接控制器

namespace ActiveCampaign.WebUI.Controllers
{
    public class EditContactController : Controller
    {
        private IContactRepository _repository;
        private ActiveApi _activeService = new ActiveApi();

        public EditContactController(IContactRepository contactRepository)
        {
            _repository = contactRepository;
        }

        public ActionResult Index(Contact contact)
        {
            return View("EditContact", contact);
        }

        [HttpPost]
        public ActionResult EditContact(Contact contact)
        {
            if (ModelState.IsValid)
            {
                var result = _activeService.EditContact(contact);
                if (result)
                {
                    _repository.SaveContact(contact);
                    return RedirectToAction("Index", "Home");
                }
            }

            return View("EditContact", contact);
        }

        public ActionResult Cancel()
        {
            return RedirectToAction("Index", "Home");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您尚未指定按钮的类型。默认类型为button,它本身不执行任何操作。你想要的是submit

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我想您忘了在BeginForm中添加post方法。我认为编辑下面这样的代码可能会正常工作。并检查任何标签错位。

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