Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ASP.NET MVC-jQuery POST方法为空_Javascript_Jquery_Ajax_Asp.net Mvc_Twitter Bootstrap - Fatal编程技术网

Javascript ASP.NET MVC-jQuery POST方法为空

Javascript ASP.NET MVC-jQuery POST方法为空,javascript,jquery,ajax,asp.net-mvc,twitter-bootstrap,Javascript,Jquery,Ajax,Asp.net Mvc,Twitter Bootstrap,我正在调用一个PartialView并将它从另一个PartialView注入到一个中,使用Boostrap model使其成为弹出模式。 到目前为止,我的Boostrap模式显示的和预期的一样,但没有表现出预期的效果。以下是我在Boostrap模式中的目标 做一个助推模式-正常 在Boostrap模式上添加验证-正常 发送要保存在数据库中的my modal值-不正常 这是,我在其中插入部分视图,并使其成为模式视图 <div class="modal fade" id="myModal" t

我正在调用一个
PartialView
并将它从另一个
PartialView
注入到一个
中,使用
Boostrap model
使其成为弹出模式。 到目前为止,我的Boostrap模式显示的和预期的一样,但没有表现出预期的效果。以下是我在Boostrap模式中的目标

  • 做一个助推模式-正常
  • 在Boostrap模式上添加验证-正常
  • 发送要保存在数据库中的my modal值-不正常
  • 这是
    ,我在其中插入
    部分视图
    ,并使其成为模式视图

    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <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>
                <h4 class="modal-title" id="myModalLabel">Create Sample</h4>
            </div>
            <div class="modal-body">
                <div id="modalBodyContainer">
    
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary" id="btnCreateSample">Create</button>
            </div>
        </div>
    </div>
    
  • 由于控制器中的我的操作方法具有
    [ValidateAntiForgeryToken]
    注释,因此上述脚本引发异常“Token不存在…”。为了解决这个问题,我更新了代码并添加了以下代码行

     var token = $('input[name="__RequestVerificationToken"]').val();
      $.ajax({
         url: "/SessionData/Create",
         type: "POST",
         data: { $('#FormCreateSample').serialize(), __RequestVerificationToken: token },
        success: function () {
           alert("POST success");
        },
        error: function () {
            alert("POST error");
        }
     });
    
  • #2方法的问题是,它在我的操作方法
    sampleData
    参数中传递
    null
    值。下面是我在控制器中的操作方法

        [HttpPost]
        [ValidateAntiForgeryToken]
        public void Create(SampleData sampleData)
        {
            if (ModelState.IsValid)
            {
                sampleData.SessionID = Convert.ToInt32(TempData["CurrentSessionId"]);
    
                db.SampleDatas.Add(sampleData);
                db.SaveChanges();
    
                RedirectToAction("List", "SessionData");
            }
    
        }
    
    有人知道为什么
    $(“FormCreateSample”).serialize()是
    null
    ?或者它可能找不到表单idFormCreateSample

    短暂性脑缺血发作

    更新1 使用第一个答案后,模型现在被传递给方法,但所有属性仍然是
    null


    您需要在ajax调用的消息头中添加AntiForgeryToken:

    var token = $('input[name="__RequestVerificationToken"]').val();
    var tokenadr = $('form[action="/SessionData/Create"] input[name="__RequestVerificationToken"]').val(); 
    
    var headers = {};
    var headersadr = {};
    headers['__RequestVerificationToken'] = token;
    headersadr['__RequestVerificationToken'] = tokenadr;
    
     $.ajax({
     url: "/SessionData/Create",
     type: "POST",
     headers: headersadr,
     data: "__RequestVerificationToken=" + token + "" + $('form[action="/SessionData/Create"]').serialize(),
    success: function () {
       alert("POST success");
    },
    error: function () {
        alert("POST error");
    }
    });
    

    您需要在ajax调用的消息头中添加AntiForgeryToken:

    var token = $('input[name="__RequestVerificationToken"]').val();
    var tokenadr = $('form[action="/SessionData/Create"] input[name="__RequestVerificationToken"]').val(); 
    
    var headers = {};
    var headersadr = {};
    headers['__RequestVerificationToken'] = token;
    headersadr['__RequestVerificationToken'] = tokenadr;
    
     $.ajax({
     url: "/SessionData/Create",
     type: "POST",
     headers: headersadr,
     data: "__RequestVerificationToken=" + token + "" + $('form[action="/SessionData/Create"]').serialize(),
    success: function () {
       alert("POST success");
    },
    error: function () {
        alert("POST error");
    }
    });
    
    试着改变

    .serialize()
    

    试着改变

    .serialize()
    

    添加以下内容:内容类型:'application/json',


    添加以下内容:内容类型:'application/json',

    在调试我的场景几天后,我现在找到了解决方案。我没有使用
    引导模式
    ,而是使用
    引导框
    。使用
    Bootbox
    修复了从验证到保存到数据库的所有问题

    下面是我用来打开模态的脚本

    <script>
    $(document).ready(function () {
        $("#modalCreateSample").on('click', function () {
            $.ajax({
                url: "/SessionData/Create",
                type: 'GET',
                success: function (data) {
    
                    bootbox.dialog({
                        title: "Create Session",
                        message: data,
                        buttons: {
                            success: {
                                label: "Save",
                                className: "btn-success",
                                callback: function () {
    
                                    var form = $('#FormCreateSample');
                                    form.data('validator', null);
                                    $.validator.unobtrusive.parse(form);
    
                                    if ($(form).valid()) {
                                        $.post("/SessionData/Create", $("#FormCreateSample").serialize(), function (data, status) {
                                            if (status == "success") {
                                                // Refresh list of samples
    
                                                return false;
                                            }
                                        });
                                    } else {
                                        return false;
                                    }
                                }
                            }
                        }
                    });
    
                },
                error: function (error) {
                    bootbox.alert("We encounter problem while retrieving the Sample Code of the selected Session");
                }
            });
        });
    });
     </script>
    
    
    $(文档).ready(函数(){
    $(“#modalCreateSample”)。在('单击',函数(){
    $.ajax({
    url:“/SessionData/Create”,
    键入:“GET”,
    成功:功能(数据){
    bootbox.dialog({
    标题:“创建会话”,
    信息:数据,
    按钮:{
    成功:{
    标签:“保存”,
    类名:“btn成功”,
    回调:函数(){
    var form=$(“#FormCreateSample”);
    表单数据('验证器',空);
    $.validator.unobtrusive.parse(表单);
    if($(form).valid()){
    $.post(“/SessionData/Create”,$(“#FormCreateSample”).serialize(),函数(数据,状态){
    如果(状态=“成功”){
    //刷新样本列表
    返回false;
    }
    });
    }否则{
    返回false;
    }
    }
    }
    }
    });
    },
    错误:函数(错误){
    alert(“我们在检索所选会话的示例代码时遇到问题”);
    }
    });
    });
    });
    
    经过几天的场景调试,我现在找到了解决方案。我没有使用
    引导模式
    ,而是使用
    引导框
    。使用
    Bootbox
    修复了从验证到保存到数据库的所有问题

    下面是我用来打开模态的脚本

    <script>
    $(document).ready(function () {
        $("#modalCreateSample").on('click', function () {
            $.ajax({
                url: "/SessionData/Create",
                type: 'GET',
                success: function (data) {
    
                    bootbox.dialog({
                        title: "Create Session",
                        message: data,
                        buttons: {
                            success: {
                                label: "Save",
                                className: "btn-success",
                                callback: function () {
    
                                    var form = $('#FormCreateSample');
                                    form.data('validator', null);
                                    $.validator.unobtrusive.parse(form);
    
                                    if ($(form).valid()) {
                                        $.post("/SessionData/Create", $("#FormCreateSample").serialize(), function (data, status) {
                                            if (status == "success") {
                                                // Refresh list of samples
    
                                                return false;
                                            }
                                        });
                                    } else {
                                        return false;
                                    }
                                }
                            }
                        }
                    });
    
                },
                error: function (error) {
                    bootbox.alert("We encounter problem while retrieving the Sample Code of the selected Session");
                }
            });
        });
    });
     </script>
    
    
    $(文档).ready(函数(){
    $(“#modalCreateSample”)。在('单击',函数(){
    $.ajax({
    url:“/SessionData/Create”,
    键入:“GET”,
    成功:功能(数据){
    bootbox.dialog({
    标题:“创建会话”,
    信息:数据,
    按钮:{
    成功:{
    标签:“保存”,
    类名:“btn成功”,
    回调:函数(){
    var form=$(“#FormCreateSample”);
    表单数据('验证器',空);
    $.validator.unobtrusive.parse(表单);
    if($(form).valid()){
    $.post(“/SessionData/Create”,$(“#FormCreateSample”).serialize(),函数(数据,状态){
    如果(状态=“成功”){
    //刷新样本列表
    返回false;
    }
    });
    }否则{
    返回false;
    }
    }
    }
    }
    });
    },
    错误:函数(错误){
    alert(“我们在检索所选会话的示例代码时遇到问题”);
    }
    });
    });
    });
    
    .serialize()
    将包括令牌。没有必要再添加它。显示您的模型(它的属性是包含getter/setter还是仅包含字段?我还假设它的
    public ActionResult Create(SampleData-SampleData)
    (而不是
    void
    )@Stephen Muecke我的模型具有getter/setters和
    <script>
    $(document).ready(function () {
        $("#modalCreateSample").on('click', function () {
            $.ajax({
                url: "/SessionData/Create",
                type: 'GET',
                success: function (data) {
    
                    bootbox.dialog({
                        title: "Create Session",
                        message: data,
                        buttons: {
                            success: {
                                label: "Save",
                                className: "btn-success",
                                callback: function () {
    
                                    var form = $('#FormCreateSample');
                                    form.data('validator', null);
                                    $.validator.unobtrusive.parse(form);
    
                                    if ($(form).valid()) {
                                        $.post("/SessionData/Create", $("#FormCreateSample").serialize(), function (data, status) {
                                            if (status == "success") {
                                                // Refresh list of samples
    
                                                return false;
                                            }
                                        });
                                    } else {
                                        return false;
                                    }
                                }
                            }
                        }
                    });
    
                },
                error: function (error) {
                    bootbox.alert("We encounter problem while retrieving the Sample Code of the selected Session");
                }
            });
        });
    });
     </script>