使用html.beginform时不调用HTTPPOST方法

时间:2015-03-21 11:48:30

标签: html asp.net-mvc twitter-bootstrap html.beginform

我希望有人可以帮助我解决我遇到的这个简单问题,但无法理解。

我在javascript中使用Ajax调用来提交表单没问题。

我现在正在尝试使用html.beginform帮助程序,但是它没有在我用于Ajax调用的同一个控制器中命中post方法。

要使post方法命中,我需要做什么?

这是我的控制器代码:

[HttpPost]
        //[ValidateAntiForgeryToken]
        public async Task<ActionResult> Create(Category category)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    await db.AddCategoryAsync(category);


                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
            }

            return View(category);
        }

这是我的HTML:

@using (Html.BeginForm())
{
    @*@Html.AntiForgeryToken()*@
    @Html.ValidationSummary()
    <div class="body-content">
        <h4>Category</h4>
        <hr />
        <div class="form-group">
            <div class="col-offset-1 col-lg-11 col-md-11 col-sm-11 col-xs-11">
                @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @placeholder = "Description" } })
                @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <button type="submit" id="btnCategoryCreate" class="btn btn-primary col-offset-2"><span class="glyphicon glyphicon-save"></span> Create</button>
        </div>
    </div>
}

当我点击提交按钮时,这是我浏览器中的网址。它位于执行 Create 方法的 Home 控制器中,但在调试期间,Controller方法永远不会被命中。

有人帮助我,让我知道我忽略了什么简单的错误......

http://localhost:1681/Home/Create?Description=Medical

修改

表格标签的价值 好的..问题是...... 在表单操作标记上,内容如下: “看到一个'form'开始标记,但是已经存在一个活动的'form'元素。不允许嵌套表单。忽略这个标记()。

这就是为什么它不发布。

我删除了_Layout.cshtml文件中的表单标签,现在它正在发布,因为现在只有一个表单标记用于此特定页面,而当我通过Ajax使用所有调用时,我在_Layout中有表单标记.cshtml文件。

但是,当我使用以下形式进行Ajax调用时,我的按钮位于文本框右侧而不是位于文本框的下方:

<form id="form1" class="form-horizontal" role="form">

我尝试将以下内容放在@ html.BeginForm标记上,但按钮仍在右侧。

@using (Html.BeginForm("Create", "Home", FormMethod.Post, new { htmlAttributes = new { @class="form-horizontal", role="form"}}))

如何立即在输入框下方显示我的按钮?

@using (Html.BeginForm("Create", "Home", FormMethod.Post, new { htmlAttributes = new { @class="form-horizontal", role="form"}}))
{
    @*@Html.AntiForgeryToken()*@
    @Html.ValidationSummary()
    <div class="body-content">
        <h4>Category</h4>
        <hr />
        <div class="form-group">
            <div class="col-offset-1 col-lg-11 col-md-11 col-sm-11 col-xs-11">
                @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @placeholder = "Description" } })
                @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <button type="submit" id="btnCategoryCreate" class="btn btn-primary col-offset-2"><span class="glyphicon glyphicon-save"></span> Create</button>
        </div>
    </div>
}

1 个答案:

答案 0 :(得分:0)

您是否要调用Async方法?

尝试向HTML表单添加更多信息:

@using (Html.BeginForm("Create", "Home", FormMethod.Post))

如果要使用Ajax和异步使用:

@using (Ajax.BeginForm())