Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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
MVC通过javascript发布到控制器奇怪的json对象行为_Javascript_Asp.net Mvc - Fatal编程技术网

MVC通过javascript发布到控制器奇怪的json对象行为

MVC通过javascript发布到控制器奇怪的json对象行为,javascript,asp.net-mvc,Javascript,Asp.net Mvc,提交表单时,我用javascript捕获它。我进行了一些验证,创建了一个json对象,并将其传递给$.post()。在我的控制器中,我使用与json对象相同的定义定义定义了一个对象。我发现,如果我没有访问javascript中的json对象,那么当它到达控制器时,它将为null。如果我在它的字段上做了一个警报,那么控制器将填充值。知道为什么会这样吗 $(function(){ $("#VideoForm").submit(function () { va

提交表单时,我用javascript捕获它。我进行了一些验证,创建了一个json对象,并将其传递给$.post()。在我的控制器中,我使用与json对象相同的定义定义定义了一个对象。我发现,如果我没有访问javascript中的json对象,那么当它到达控制器时,它将为null。如果我在它的字段上做了一个警报,那么控制器将填充值。知道为什么会这样吗

$(function(){

        $("#VideoForm").submit(function () {
            var video = $("#txtVideo").val();

            var val = getVideoID(video);

            if (val.ID == -1) {
                event.preventDefault();
                alert("Invalid url. Only Vimeo and YouTube are supported.")
                $("#txtVideo").val("")
                return false;
            }

            // if this is commented out then my controller parameter object is null
            // if this is uncommented then my controller parameter object is filled in
            //alert(val.ID);
            //alert(val.Source);

            $.post('/Home/Index', val, function (data) {
            });
        });

 function getVideoID(videolink){
            var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
            var match = videolink.match(regExp);

            if (match && match[7].length == 11)
            {
                //alert("youtube video id : "+ match[7]);
                alert("Youtube match");
                return { ID: match[7], Source: "youtube" };
            }

            regExp = "vimeo\\.com/(?:.*#|.*/videos/)?([0-9]+)";
            match = videolink.match(regExp);
            if(match)
            {
                var videoid = videolink.split('/')[videolink.split('/').length - 1];

                alert("Vimeo match");
                //alert("vimeo video id :"+videoid);
                return { ID: videoid, Source: "vimeo" };
            }
            else
            {
                return { ID: -1, Source: "" };
            }
        };

getVideoID做什么?返回一个对象。更新了原始源代码。但该函数返回的数据很好。也许一些防御性的编码会有所启发。在下次调用try/catch之前测试返回值或属性提取。我正在测试这些值。当我提醒()值时,它们都起作用,一切都起作用。我一拿出警报()就不去了。这就是为什么我很困惑的原因。