Microsoft JScript运行时错误:对象不支持属性或方法'val'

时间:2014-02-18 12:14:29

标签: c# asp.net ajax asp.net-mvc json

我正在制作一个json请求,如果请求的结果为真,我希望显示一个特定的div。

目前我收到的错误如下,你能帮我解决一下这个问题吗?

  

Microsoft JScript运行时错误:对象不支持属性或   方法'val'

p.s:我已经通过控制台检查了json正确返回“true”并且问题是成功的。

我附上了以下代码。

脚本:

<script type='text/javascript'>

    $(document).ready(function () {
        $('#ComputerLocation').hide();
        $('#typeddl').on('change', function () {
            $.ajax({
                type: 'POST',
                url: '@Url.Action("GetItemTypeForm")',
                data: { itemTypeId: $('#typeddl').val() },
                success: function (result) {                 
                    if (result != null && result.val(this.Value) == 'true') {
                        $('#ComputerLocation').show();
                    };
                }
            });
         });
    });

</script>

控制器:

 [HttpPost]
        public JsonResult GetItemTypeForm(int itemTypeId)
        {
            //pseudo code
            var data = from s in db.ItemTypes
                       where s.ItemTypeId == itemTypeId 
                       select new { Value = s.IsComputer };

            return Json(data);
        }

1 个答案:

答案 0 :(得分:0)

如果我理解正确的话:

当您尝试在此行中获取val()时

  

(ifresult!= null&amp;&amp; result.val(this.Value)=='true'){

你假设结果有一个叫做val的函数,但是在json中你不能发送函数而你正在尝试发送这个函数this.Value而且这根本没有任何意义。

我假设你想:

  

if(result!= null&amp;&amp; result.val =='true'){

并且在这一行中您也使用this我认为这也可能是错误的。在使用ajax回调之前,应将其设置为另一个字段。

<script type='text/javascript'>

    $(document).ready(function () {
        $('#ComputerLocation').hide();
        $('#typeddl').on('change', function () {
           var that = this; // now this is an jquery object
            $.ajax({
                type: 'POST',
                url: '@Url.Action("GetItemTypeForm")',
                data: { itemTypeId: $('#typeddl').val() },
                success: function (result) {                 
                    if (result != null && result.val ==  'true') { // maybe you want to check that.val()
                        $('#ComputerLocation').show();
                    };
                }
            });
         });
    });