首页 > 解决方案 > MVC 部分视图未在控制器上点击 HTTP Post

问题描述

我有一个应该在控制器上运行 HttpPost 的部分视图,但事实并非如此。在我的主页上,我有以下部分视图

 <div class="box">
     @Html.Action("AddNote", "Member", new { MemberId = Model.Id })
 </div>

部分视图如下——

@model GMS.Core.Models.AddMemberNoteModel

@using (Html.BeginForm("AddNote", "Member", FormMethod.Post))
{
    @Html.HiddenFor(model => model.MemberId)

    <div class="input-group">
        @Html.EditorFor(model => model.Note, new { @class = "form-control", @placeholder = "Type note ..." })
    @Html.ValidationMessageFor(model => model.Note)

    <span class="input-group-btn">
        <input type="submit" class="btn btn-primary btn-flat" value="Save" />
    </span>
    </div>
}

问题是当提交按钮被按下时,HttpPost 方法没有被命中。当页面加载时,第一个 actionresult 被命中。

[Authorize]
    public ActionResult AddNote(string memberId)
    {
        AddMemberNoteModel model = new AddMemberNoteModel();

        model.MemberId = Convert.ToInt32(memberId);

        return PartialView("AddNote", model);
    }

    [HttpPost]
    public ActionResult AddNote(AddMemberNoteModel model)
    {
        model.DateCreated = DateTime.Now;
        model.CreatedBy = ((CustomPrincipal)HttpContext.User).Id;

        model.LastUpdated = DateTime.Now;
        model.LastUpdateBy = ((CustomPrincipal)HttpContext.User).Id;

        if (ModelState.IsValid)
        {
            _memberService.AddNote(model);

            this.TempData["Notification"] = "A note has been added.";

            return RedirectToAction("Details", "Member", new { id = model.MemberId });
        }
        else
        {
            return PartialView(model);
        }
    }

呈现的 HTML

 <form action="/Member/AddNote/7537" method="post"><input data-val="true" data-val-number="The field MemberId must be a number." data-val-required="The MemberId field is required." id="MemberId" name="MemberId" type="hidden" value="7537" /><div class="input-group">
<input class="text-box single-line" data-val="true" data-val-required="The Note field is required." id="Note" name="Note" type="text" value="" />
    <span class="field-validation-valid" data-valmsg-for="Note" data-valmsg-replace="true"></span>

        <span class="input-group-btn">
        <input type="submit" class="btn btn-primary btn-flat" value="Save" />
        </span>
    </div>
</form>

标签: asp.net-mvc

解决方案


答案是我将添加注释表单嵌入到另一个表单中。

@(Html.BeginForm())
{
..........
@using (Html.BeginForm("AddNote", "Member", FormMethod.Post))
{
    @Html.HiddenFor(model => model.MemberId)

    <div class="input-group">
        @Html.EditorFor(model => model.Note, new { @class = "form-control", @placeholder = "Type note ..." })
    @Html.ValidationMessageFor(model => model.Note)

    <span class="input-group-btn">
        <input type="submit" class="btn btn-primary btn-flat" value="Save" />
    </span>
    </div>
}
}

推荐阅读