Javascript 重定向到MVC中带有JsonResult的操作

Javascript 重定向到MVC中带有JsonResult的操作,javascript,c#,ajax,asp.net-mvc,entity-framework,Javascript,C#,Ajax,Asp.net Mvc,Entity Framework,我的数据库中有一个房间记录,我想使用RoomController中的JsonResultedit方法对其进行编辑,如下所示: [HttpPost] [ValidateAntiForgeryToken] public JsonResult Edit(RoomViewModel roomViewModel) { if (roomViewModel == null) throw new ArgumentNullException(nameof(roomV

我的数据库中有一个房间记录,我想使用
RoomController
中的
JsonResult
edit
方法对其进行编辑,如下所示:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult Edit(RoomViewModel roomViewModel)
    {
        if (roomViewModel == null) throw new ArgumentNullException(nameof(roomViewModel));
        try
        {
            var apartmentRoomViewModel = new ApartmentRoomViewModel
            {
                Id = _entities.ApartmentRoom.Where(x => x.RoomID == roomViewModel.Id).Select(x => x.Id).Single(),
                ApartmentID = _entities.ApartmentRoom.Where(x => x.RoomID == roomViewModel.Id).Select(x => x.ApartmentID).Single(),
                RoomID = roomViewModel.Id
            };
            apartmentRoomViewModel.ApartmentID = roomViewModel.SelectedApartmentID;

            var apartmentRoom = AutoMapper.Mapper.Map<ApartmentRoom>(apartmentRoomViewModel);
            _entities.ApartmentRoom.AddOrUpdate(apartmentRoom);
            _entities.SaveChanges();

            var room = AutoMapper.Mapper.Map<Room>(roomViewModel);
            var status = _roomRepository.Update(room);
            _roomRepository.Save();

            return Json(new { status, message = "Success!", url = Url.Action("List", "Room") });
        }
        catch
        {
            return Json(new { status = false, message = "Error!" });
        }
    }
[HttpPost]
[ValidateAntiForgeryToken]
公共JsonResult编辑(RoomViewModel RoomViewModel)
{
如果(roomViewModel==null)抛出新的ArgumentNullException(nameof(roomViewModel));
尝试
{
var apartmentRoomViewModel=新的apartmentRoomViewModel
{
Id=\u entities.ApartmentRoom.Where(x=>x.RoomID==roomViewModel.Id)。选择(x=>x.Id)。Single(),
ApartmentID=\u entities.ApartmentRoom.Where(x=>x.RoomID==roomViewModel.Id)。选择(x=>x.ApartmentID).Single(),
RoomID=roomViewModel.Id
};
apartmentRoomViewModel.ApartmentID=roomViewModel.SelectedPartmentId;
var apartmentRoom=AutoMapper.Mapper.Map

我的脚本

<script type="text/javascript">
$(document).ready(function () {
    $("#RoomEdit").click(function (e) {
        e.preventDefault();
        var data = {
            DoorNumber: $("#DoorNumber").val(),
            FloorNumber: $("#FloorNumber").val(),
            Capacity: $("#Capacity").val(),
            SelectedApartmentID: $("#SelectedApartmentID option:selected").val()
        }
        $.ajax({
            type: "POST",
            url: '@Url.Action("Edit","Room")',
            dataType: "json",
            data: JSON.stringify(data),
            contentType: "application/json",
            success: function (result) {
                if (result.status) {

                    window.location.href = result.url;
                }
            },
            error: function () {
            }
        });
        return false;
    });

});

$(文档).ready(函数(){
$(“#房间编辑”)。单击(功能(e){
e、 预防默认值();
风险值数据={
门牌号:$(“#门牌号”).val(),
楼层编号:$(“#楼层编号”).val(),
容量:$(“#容量”).val(),
SelectedPartmentId:$(“#SelectedPartmentId选项:selected”).val()
}
$.ajax({
类型:“POST”,
url:'@url.Action(“编辑”,“文件室”)',
数据类型:“json”,
数据:JSON.stringify(数据),
contentType:“应用程序/json”,
成功:功能(结果){
如果(结果状态){
window.location.href=result.url;
}
},
错误:函数(){
}
});
返回false;
});
});

Edit.cshtml

<div class="row">

<div class="col-md-10 offset-md-1">
    <div class="box">
        <div class="box-header">
            <h2>@ViewBag.Title</h2>
        </div>
        <div class="box-divider m-a-0"></div>
        <div class="box-body">
            @using (Html.BeginForm("Edit", "Room", FormMethod.Post))
            {
                @Html.AntiForgeryToken()
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                <div class="form-group row">
                    @Html.LabelFor(x => x.DoorNumber, new { @class = "col-sm-2 form-control-label" })
                    <div class="col-sm-10">
                        @Html.TextBoxFor(x => x.DoorNumber, new { @class = "form-control" })
                        @Html.ValidationMessageFor(x => x.DoorNumber, "", new { @class = "text-danger" })
                    </div>
                </div>
                <div class="form-group row">
                    @Html.LabelFor(x => x.FloorNumber, new { @class = "col-sm-2 form-control-label" })
                    <div class="col-sm-10">
                        @Html.TextBoxFor(x => x.FloorNumber, new { @class = "form-control" })
                        @Html.ValidationMessageFor(x => x.FloorNumber, "", new { @class = "text-danger" })
                    </div>
                </div>
                <div class="form-group row">
                    @Html.LabelFor(x => x.Capacity, new { @class = "col-sm-2 form-control-label" })
                    <div class="col-sm-10">
                        @Html.TextBoxFor(x => x.Capacity, new { @class = "form-control" })
                        @Html.ValidationMessageFor(x => x.Capacity, "", new { @class = "text-danger" })
                    </div>
                </div>
                <div class="form-group row">
                    @Html.LabelFor(x => x.ApartmentName, new { @class = "col-sm-2 form-control-label" })
                    <div class="col-sm-10">
                        @Html.DropDownListFor(x => x.SelectedApartmentID, Model.ApartmentList, new { @class = "form-control", id = "SelectedApartmentID" })
                    </div>
                </div>
                <div class="form-group row m-t-md">
                    <div class="col-sm-offset-2 col-sm-10">
                        <button type="button" id="RoomEdit" class="btn green">Düzenle</button>
                    </div>
                </div>
            }
        </div>
    </div>
</div>

@视图包。标题
@使用(Html.BeginForm(“编辑”、“房间”、FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true,“,new{@class=“text danger”})
@LabelFor(x=>x.DoorNumber,新的{@class=“col-sm-2表单控制标签”})
@TextBoxFor(x=>x.DoorNumber,新的{@class=“form control”})
@Html.ValidationMessageFor(x=>x.DoorNumber,“,new{@class=“text danger”})
@Html.LabelFor(x=>x.FloorNumber,新的{@class=“col-sm-2表单控件标签”})
@TextBoxFor(x=>x.FloorNumber,新的{@class=“form control”})
@Html.ValidationMessageFor(x=>x.FloorNumber,“,new{@class=“text danger”})
@LabelFor(x=>x.Capacity,新的{@class=“col-sm-2表单控制标签”})
@TextBoxFor(x=>x.Capacity,新的{@class=“form control”})
@Html.ValidationMessageFor(x=>x.Capacity,“,new{@class=“text danger”})
@LabelFor(x=>x.ApartmentName,新的{@class=“col-sm-2表单控件标签”})
@Html.DropDownListFor(x=>x.SelectedApartmentID,Model.ApartmentList,新的{@class=“form control”,id=“SelectedApartmentID”})
杜泽勒
}


我无法理解我的代码有什么问题。请提供任何帮助。

您有代码可以执行ajax提交。但是从您共享的图像来看,它似乎正在执行正常的表单提交。请确保在单击按钮时阻止默认的表单提交行为

您已经有了
returnfalse;
,应该由它来执行

只要页面中没有其他脚本错误,它就可以工作(可以通过打开浏览器控制台进行验证)

另外,请确保将
true
作为要返回的json数据的status属性值返回。当您从HttpPost操作方法返回时,无需在json方法重载中指定
JsonRequestBehavior.AllowGet
enum。如果操作方法是HttpGet,则需要该属性

return Json(new { status= true, message = "Success!", url = Url.Action("List", "Room") });

另外,让
$调用重定向到新页面后通知
调用也没有任何意义。这意味着该调用根本不会执行!

首先使用
type=“Button”
按钮,而不是提交,同时将单击函数id从
btnAdd
更改为
btnEdit

在服务器端,如果使用旧方法,roomViewModel.Id将得到0,而不是此方法,请执行序列化,以便在服务器端方法中获得所有输入

还可以使用,
@Html.HiddenFor(x=>x.id)
将id传递给方法

试试这个函数,这样你就可以用AJAX调用你的方法了

<script type="text/javascript">
    $(document).ready(function () {
        $("#RoomEdit").click(function (e) {
            e.preventDefault();
            var data = $("#formName").serialize();
            $.ajax({
                type: "POST",
                url: '@Url.Action("Edit", "Room")',
                data: data,
                success: function (result) {
                    if (result.status) {
                        alert(result.message);
                        setTimeout(function () {
                            window.location.href = result.url;
                        }, 1000);
                    }
                }
            });
        });
    })
</script>

$(文档).ready(函数(){
$(“#房间编辑”)。单击(功能(e){
e、 预防默认值();
var data=$(“#formName”).serialize();
$.ajax({
类型:“POST”,
url:'@url.Action(“编辑”,“文件室”)',
数据:数据,
成功:功能(结果){
如果(结果状态){
警报(结果消息);
setTimeout(函数(){
window.location.href=result.url;
}, 1000);
}
}
});
});
})

检查按钮RoomAdd是否带有类型button?,您的代码