Jquery MVC 5使用Ajax发布并返回PartialView调用在发布后获得?

Jquery MVC 5使用Ajax发布并返回PartialView调用在发布后获得?,jquery,ajax,asp.net-mvc,Jquery,Ajax,Asp.net Mvc,我仍在学习如何在Ajax中使用局部视图,但我不明白为什么我的场景会在文章之后调用GET。这实际上导致了页面刷新,破坏了Ajax更新的全部目的 我有一个Razor页面,它使用部分视图以表格式写出记录。在页面底部有一个文本框,允许用户提交新的注释,其想法是将该注释插入数据库,然后只更新表 这是我的.cshtml页面的大部分。为了简洁起见,已删除了一些标签和文本框 <form id="logForm"> @Html.AntiForgeryToken() <div i

我仍在学习如何在Ajax中使用局部视图,但我不明白为什么我的场景会在文章之后调用GET。这实际上导致了页面刷新,破坏了Ajax更新的全部目的

我有一个Razor页面,它使用部分视图以表格式写出记录。在页面底部有一个文本框,允许用户提交新的注释,其想法是将该注释插入数据库,然后只更新表

这是我的.cshtml页面的大部分。为了简洁起见,已删除了一些标签和文本框

<form id="logForm">
    @Html.AntiForgeryToken()

    <div id="exceptionTable">
        @Html.Partial("_DailyLogExceptionsTable", Model)
    </div>

    <div class="well">
        <div class="row voffset3">
            <div class="col-md-7">
                Enter Exception Log comment
                @Html.TextAreaFor(m => m.ExceptionComment, new { cols = 200, @rows = 4, @maxlength = "100", @class = "form-control", @placeholder = "100 character limitation" })
                @Html.ValidationMessageFor(m => m.ExceptionComment, null, new { @class = "text-danger" })
            </div>
        </div>

        <div class="row voffset3">
            <div class="col-md-12 form-group">
                <button id="btnSubmit" class="btn btn-primary">
                    <i class="fa fa-arrow-circle-right" aria-hidden="true"></i> Submit
                </button>
                &nbsp;&nbsp;
                <a href="@Url.Action("ScheduleDetails", "Home")" class="btn btn-default">
                    <span class="fa fa-reply" aria-hidden="true"></span> Cancel
                </a>
            </div>
        </div>
    </div>

    <div style="text-align:center;display:none" id="loaderDiv">
        <img src="~/Content/Images/InternetSlowdown_Day.gif" width="150" />
    </div>

</form>
这是我在控制器中的帖子

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DailyLog(ExceptionLogDailyViewModel vm)
{
    try
    {
        DAL.CommentInsertBySupervisor(vm, UserId);

        //repopulate the exceptions/comments.
        vm.listExceptions = DAL.GetEmployeeExceptionsByDate(vm.CurrentEmployeeId, vm.ShiftDate);        
    }
    catch (Exception ex)
    {
        //log error
    }   

    return PartialView("_DailyLogExceptionsTable", vm);
}

当我调试时,我可以看到它调用POST并按其应该的方式重新填充部分视图,然后在POST完成后立即转到GET,它创建一个新的ViewModel并使用返回视图(vm),并有效地执行服务器端POST。这会导致页面闪烁,并将滚动页面移动到顶部。

您的提交按钮位于
表单
标记内。单击submit将触发一个普通表单submit。在执行ajax时,需要防止这种默认行为。目前你没有这样做,因此它是一个正常的表单提交以及

您可以使用jQuery方法来执行此操作

$(function(){

   $("#btnSubmit").click(function (e) {
       e.preventDefault();

       // your existing ajax code
   });

});
<>而不是将提交按钮单击事件,您可以考虑将Ajax代码作为事件处理程序连接到<代码>提交< /代码>事件。

$(function(){

   $("#logForm").submit(function (e) {
       e.preventDefault();
       var data = $(this).serialize();
       var url = $(this).attr("action");
       // your existing ajax code
   });

});
现在这个代码将用于按钮点击和表单提交,使用回车键


另一个选项是从回调方法(连接到提交事件/单击事件)执行
返回false

您的提交按钮位于
表单
标记内。单击submit将触发一个普通表单submit。在执行ajax时,需要防止这种默认行为。目前你没有这样做,因此它是一个正常的表单提交以及

您可以使用jQuery方法来执行此操作

$(function(){

   $("#btnSubmit").click(function (e) {
       e.preventDefault();

       // your existing ajax code
   });

});
<>而不是将提交按钮单击事件,您可以考虑将Ajax代码作为事件处理程序连接到<代码>提交< /代码>事件。

$(function(){

   $("#logForm").submit(function (e) {
       e.preventDefault();
       var data = $(this).serialize();
       var url = $(this).attr("action");
       // your existing ajax code
   });

});
现在这个代码将用于按钮点击和表单提交,使用回车键


另一个选项是从回调方法(连接到提交事件/单击事件)执行
返回false

是否尝试添加
返回false
e.preventDefault()在单击事件结束时?您是否尝试添加
return false
e.preventDefault()点击活动结束时?完美!我在看一篇文章,他没有e.preventDefault()。我改用你展示的#logForm.submit方式。我确实有一个关于URL部分的问题。您将url设置为表单的操作,我假设它将设置为POST,但是告诉它/Controller/ActionResult去哪里呢。如果我想像你一样使用url,我需要把它放在表单的某个地方吗?现在我将url保留在Ajax调用中的方式,它可以工作,但这可能不是最好的方式。表单的action属性值将包含表单提交到的url。您可以显式设置它(
)。这样,您就可以从UI中读取。因此,如果您想要将表单更改为提交到其他操作方法,您只需更新HTML标记Great!这一切对我来说都很重要。我以我认为更具可读性的形式添加了这个动作,然后将url变量设置为ajax.url:url,它就如预期的那样工作了。再次感谢!您还可以使用
Url.Action
helper方法生成操作方法的正确相对路径。例:
)完美!我在看一篇文章,他没有e.preventDefault()。我改用你展示的#logForm.submit方式。我确实有一个关于URL部分的问题。您将url设置为表单的操作,我假设它将设置为POST,但是告诉它/Controller/ActionResult去哪里呢。如果我想像你一样使用url,我需要把它放在表单的某个地方吗?现在我将url保留在Ajax调用中的方式,它可以工作,但这可能不是最好的方式。表单的action属性值将包含表单提交到的url。您可以显式设置它(
)。这样,您就可以从UI中读取。因此,如果您想要将表单更改为提交到其他操作方法,您只需更新HTML标记Great!这一切对我来说都很重要。我以我认为更具可读性的形式添加了这个动作,然后将url变量设置为ajax.url:url,它就如预期的那样工作了。再次感谢!您还可以使用
Url.Action
helper方法生成操作方法的正确相对路径。示例: