Razor MVC5在不离开页面的情况下发布到控制器

Razor MVC5在不离开页面的情况下发布到控制器,razor,asp.net-mvc-5,Razor,Asp.net Mvc 5,我正在构建一个MVC5应用程序(使用Razor)。在顶部的导航栏中,我有一个按钮,该按钮以用于反馈的形式淡出。我能够成功地将此数据发布到不同的控制器(而不是当前生成页面的控制器),但是我无法使页面不加载控制器的post方法。我可以让它重新加载当前页面,但我想阻止任何屏幕更改。这可能吗 我试着用它来完成这项任务,但没有成功 以下是我在视图中的当前代码: <div class="modal fade" id="feedbackForm" tabindex="-1" role="dialog"

我正在构建一个MVC5应用程序(使用Razor)。在顶部的导航栏中,我有一个按钮,该按钮以用于反馈的形式淡出。我能够成功地将此数据发布到不同的控制器(而不是当前生成页面的控制器),但是我无法使页面不加载控制器的post方法。我可以让它重新加载当前页面,但我想阻止任何屏幕更改。这可能吗

我试着用它来完成这项任务,但没有成功

以下是我在视图中的当前代码:

<div class="modal fade" id="feedbackForm" tabindex="-1" role="dialog" aria-labelledby="feedbackFormLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h5 class="modal-title">Feedback for @ViewBag.Title</h5>
            </div>
            @using (Html.BeginForm("CreateRemote", "Feedback", FormMethod.Post)) {
                <div class="modal-body">

                    @Html.AntiForgeryToken()

                    <div class="form-horizontal">
                        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                        <div class="form-group">
                            @Html.LabelFor(model => model.Pain)
                            <div class="col-md-10">
                                @Html.EditorFor(model => model.Pain, new { htmlAttributes = new { @class = "form-control" } })
                                @Html.ValidationMessageFor(model => model.Pain, "", new { @class = "text-danger" })
                            </div>
                        </div>
                    </div>

                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
                    <input id="FeedbackSubmit" type="submit" value="Submit" class="btn btn-success" />
                </div>
            }
        </div>
    </div>
</div>

&时代;
@ViewBag.Title的反馈
@使用(Html.BeginForm(“CreateRemote”,“Feedback”,FormMethod.Post)){
@Html.AntiForgeryToken()
@Html.ValidationSummary(true,“,new{@class=“text danger”})
@LabelFor(model=>model.Pain)
@EditorFor(model=>model.Pain,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Pain,“,new{@class=“text danger”})
取消
}
编辑

下面是我如何修改它的结尾以使用AJAX:

@*@using (Html.BeginForm("CreateRemote", "Feedback", FormMethod.Post)) {*@
    <div class="modal-body">

        @Html.AntiForgeryToken()

        <div class="form-horizontal">
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.Pain)
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Pain, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.Pain, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>

    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
        <input id="FeedbackSubmit" value="Submit" class="btn btn-success" />
        <script type="text/javascript">
            $('#FeedbackSubmit').click(function () {
                var url = "/Feedback/CreateRemote";
                var pain = 10;
                $.post(url, { LanId: 'C15919' }, function (data) {
                    alert(data);
                });
            })
        </script>
    </div>
@*}*@
@*@使用(Html.BeginForm(“CreateRemote”,“Feedback”,FormMethod.Post)){*@
@Html.AntiForgeryToken()
@Html.ValidationSummary(true,“,new{@class=“text danger”})
@LabelFor(model=>model.Pain)
@EditorFor(model=>model.Pain,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Pain,“,new{@class=“text danger”})
取消
$(“#反馈提交”)。单击(函数(){
var url=“/Feedback/CreateRemote”;
var疼痛=10;
$.post(url,{LanId:'C15919'},函数(数据){
警报(数据);
});
})
@*}*@
如果我将
输入保持原样,则不会执行任何操作,也不会调用控制器。如果我将其更改为
,您是否尝试使用type=“button”作为提交按钮,并使用ajax调用,如下所示:

var p = { Data: $('#search').val() };

$.ajax({
        type: 'POST',
        url: "/Feedback/CreateRemote",
        data: JSON.stringify(p),
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                success: function (data) {
                    alert(data);
                },
                error: function () {
                    alert("error");
                }
});

你可以用AJAX实现这一点。我试过了,但没有成功。但是,我对AJAX不太熟悉,所以我可能做错了。如果希望在不刷新页面的情况下将数据发布到后端,AJAX是一种合适的技术。更新代码以显示您对AJAX的尝试。您现在显示的代码将执行一个普通的HTTP post,因此对回答您的问题没有帮助。您应该说明您是如何使用AJAX进行此操作的。我编辑了此post以显示我所做的尝试。