Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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 Action循环导致页面上的模型错误(可变范围污染?)_Javascript_Jquery_Asp.net Mvc_Asp.net Mvc 3_Razor 2 - Fatal编程技术网

Javascript Action循环导致页面上的模型错误(可变范围污染?)

Javascript Action循环导致页面上的模型错误(可变范围污染?),javascript,jquery,asp.net-mvc,asp.net-mvc-3,razor-2,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 3,Razor 2,我有一个视图(cshtml),上面有一个选项卡条。当然,每个选项卡的内容都不同。各个选项卡上有正确的数据/信息。当从单个选项卡上的控件进行选择时,会触发一些javascript。现在,第一个选项卡呈现javascript激发。所有其他选项卡都不会启动。在确实触发的选项卡(第一个)上,它获得了正确的值,但是当试图在模型中查找匹配项时,它没有找到匹配项。调试表明,模型中只有最后一个选项卡的数据可用。这就解释了为什么没有匹配,但回避了这样一个问题:第一页填充的数据在哪里 为了简洁起见,我删掉了代码。如

我有一个视图(cshtml),上面有一个选项卡条。当然,每个选项卡的内容都不同。各个选项卡上有正确的数据/信息。当从单个选项卡上的控件进行选择时,会触发一些javascript。现在,第一个选项卡呈现javascript激发。所有其他选项卡都不会启动。在确实触发的选项卡(第一个)上,它获得了正确的值,但是当试图在模型中查找匹配项时,它没有找到匹配项。调试表明,模型中只有最后一个选项卡的数据可用。这就解释了为什么没有匹配,但回避了这样一个问题:第一页填充的数据在哪里

为了简洁起见,我删掉了代码。如果,在我无知的情况下,我遗漏了什么,就说出来,我会发布任何需要的东西

因此,首先是父cshtml:

foreach (var extbrd in Model.ExternalBoards)
{
  tabstrip.Add()
  .Text(extbrd.ExtForumName)

  .ImageUrl("~/.../ForumTabIcon.png")
  .Content(@<text>
      <div>
          @Html.Action("ActionName", "Controller", new { id = extbrd.BoardId });
      </div>
      </text>);
}
事实上就是这样。如上所述,我可以发布阅读器代码,但我不认为这是问题的根源

这个动作当然有一个观点,这就是我认为事情变得古怪的地方:

@model ExternalThreadsModel

<script type="text/javascript">
  var model = @Html.Raw(Json.Encode(Model.RssThreads))
</script>

<script type="text/javascript">
$(function() {
    $("#@Html.FieldIdFor(model => model.ExtForumIds)").click(function () {
        var selectedItem = $(this).val();

        var matchingObj = getObjects(model, 'ThreadValue', selectedItem);

        if(matchingObj > 0)
        {
            var $iframe = $('#ForumFrame');
            if ( $iframe.length ) {
                $iframe.attr('src', matchingObj[0].Link);
            }


            var $prevfram = $('#ForumPreview');
            if ( $prevfram.length ) {
                $prevfram.val(matchingObj[0].Description);   
            }
        }

    });
});

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));
        } else if (i == key && obj[key] == val) {
            objects.push(obj);
        }
    }
    return objects;
}

</script>

<div>
<table>

    <tr>
        <td>
            @Html.DropDownListFor(model => model.ExtForumIds, Model.SelectThreads, new {style = "...", @size = 30})

        </td>
        <td style="width:25px;">&nbsp;</td>
        <td>
            @{ Html.Telerik().TabStrip()
                .Name("ForumView")
                .Items(tabstrip =>
                {
                    tabstrip.Add()
                    .Text("Preview")
                    .Content(@<text>
                        <div>
                            <textarea style="background-color:#979797; text-decoration: none;" id="ForumPreview" name="ForumPreview" rows="26" cols="200" readonly></textarea>
                        </div>
                    </text>);

                    tabstrip.Add()
                    .Text("Interactive")
                    .Content(@<text>
                            <div>
                                <iframe id="ForumFrame" name="ForumFrame" src="" style="width:800px;height:350px;"></iframe>
                            </div>
                        </text>);
                })
            .SelectedIndex(0)
            .Render();
            }

        </td>
    </tr>
</table>
</div>
@model ExternalThreadsModel
var model=@Html.Raw(Json.Encode(model.RssThreads))
$(函数(){
$(“#@Html.FieldIdFor(model=>model.ExtForumIds)”)。单击(函数(){
var selectedItem=$(this.val();
var matchingObj=getObjects(model,'ThreadValue',selectedItem);
如果(匹配bj>0)
{
变量$iframe=$(“#ForumFrame”);
如果($iframe.length){
$iframe.attr('src',matchingObj[0].Link);
}
var$prevfram=$(“#ForumPreview”);
如果($prevfram.length){
$prevfram.val(匹配对象[0]。说明);
}
}
});
});
函数getObjects(对象、键、值){
var对象=[];
用于(obj中的var i){
如果(!obj.hasOwnProperty(i))继续;
如果(对象的类型[i]=“对象”){
objects=objects.concat(getObjects(obj[i],key,val));
}else if(i==key&&obj[key]==val){
对象。推送(obj);
}
}
归还物品;
}
@Html.DropDownListFor(model=>model.ExtForumIds,model.SelectThreads,new{style=“…”,@size=30})
@{Html.Telerik().TabStrip())
.名称(“ForumView”)
.Items(tabstrip=>
{
tabstrip.Add()
.文本(“预览”)
.内容(@
);
tabstrip.Add()
.文本(“交互式”)
.内容(@
);
})
.已选择索引(0)
.Render();
}
因此,正如我提到的,每个选项卡上都有正确的数据/信息。当用户从下拉列表中选择一个项目时,就会出现问题

单击处理程序仅在第一个选项卡上激发。它不会为任何其他标签触发

在第一个选项卡上,单击处理程序确实会触发,并提取正确的selectedItem,但当它运行帮助函数getobjects时,没有找到匹配项

当我打断并检查“model”时,它被传递到getObjects中,它只包含最后一个选项卡的数据……所以,是的,没有任何东西会被匹配

对我来说,更奇怪的是这句话:

<script type="text/javascript">
  var model = @Html.Raw(Json.Encode(Model.RssThreads))
</script>

var model=@Html.Raw(Json.Encode(model.RssThreads))
在HTML中,它确实呈现了一个json对象,其中包含来自所有选项卡的所有数据……因此……在某个地方,我一定遇到了可变范围污染

一如既往,非常感谢您的支持和帮助

<script type="text/javascript">
  var model = @Html.Raw(Json.Encode(Model.RssThreads))
</script>