Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
Asp.net mvc 3 将非文本文本传递给Html.Partial()扩展方法时出现问题_Asp.net Mvc 3_Partial Views - Fatal编程技术网

Asp.net mvc 3 将非文本文本传递给Html.Partial()扩展方法时出现问题

Asp.net mvc 3 将非文本文本传递给Html.Partial()扩展方法时出现问题,asp.net-mvc-3,partial-views,Asp.net Mvc 3,Partial Views,我希望将局部视图的文件名作为从viewbag检索的数据传递,如下所示: <div id="Zone1">@Html.Partial(ViewBag.ZoneControl1)</div> @Html.Partial(ViewBag.ZoneControl) 其中,ViewBag的“ZoneControl 1”属性是从其他地方(即数据库、web服务等)检索到的所需局部视图的名称。如果我将文本作为文字字符串包含,即: <div id="Zone1">@Html

我希望将局部视图的文件名作为从viewbag检索的数据传递,如下所示:

<div id="Zone1">@Html.Partial(ViewBag.ZoneControl1)</div>
@Html.Partial(ViewBag.ZoneControl)
其中,ViewBag的“ZoneControl 1”属性是从其他地方(即数据库、web服务等)检索到的所需局部视图的名称。如果我将文本作为文字字符串包含,即:

<div id="Zone1">@Html.Partial("Controls/MyPartial")</div>
@Html.Partial(“控件/MyPartial”)
它很好用。如果我将该文本字符串作为ViewBag的属性从控制器传递,或者甚至只是在消费视图中创建一个变量,即:

@{string zone1 = "Controls/MyPartial";}
<div id="Zone1">@Html.Partial(zone1)</div>
@{string zone1=“Controls/MyPartial”}
@Html.Partial(zone1)

它不起作用。页面似乎正在加载,但从未在浏览器中显示任何内容。同样,如果我硬编码部分视图名称,这也可以,但如果它是作为变量或属性的数据传递的,则不会。有人知道为什么会这样吗?如果这是有意或不可避免的行为,是否有解决办法

您不能在
Html.Partial
(这就是
ViewBag
的功能)中使用动态,因为它只接受字符串。解决这个问题的一个快捷方法是投射您的
ViewBag.ZoneControl

@Html.Partial((string)ViewBag.ZoneControl1)
至于第二部分(
zone1=“Controls/MyPartial”
),我无法复制

下面的代码是我为测试它而编写的,它工作得很好

@{ string zone1 = "Controls/MyPartial"; }
<div>@Html.Partial(zone1)</div>
@{string zone1=“Controls/MyPartial”}
@Html.Partial(zone1)

我想,在这种情况下,使用ViewBag的答案就是您真正想要的答案。

好吧,我现在已经让它工作了,但我不确定是什么修复了它。我复制了razor code\markup并删除了该视图,创建了一个新视图并粘贴到旧代码中。唯一的区别是,当我通过向导创建新视图时,我指定不使用母版页,并且生成的页面有代码指定:

@{
    Layout = null;
}
原始页面是使用母版页创建的,然后我改变主意,完全删除了布局指令。无论如何,在做了这些改变之后,它成功了!因此,我最初猜测,原因是如果不使用母版页,视图必须指定“layout=null”。但是,我在这个新页面中取出了“layout=null”代码,它仍然有效!所以不确定出了什么问题,但总结一下:


正如@BuildStarted正确指出的,您可以使用ViewBag对象的属性作为局部视图路径,但必须将其转换为字符串才能正常工作。所以,这个问题的前提是不正确的,还有其他的东西把事情搞砸了。只是不确定是什么。

谢谢你的回复。实际上,我也尝试过将显式转换为字符串(虽然我的示例代码中没有包含),但它也不起作用。如果你说第二个例子中的“zone1”对你有用,那么我的代码中肯定还有其他东西。再次感谢,我会重新检查我的代码是否有其他问题,然后再检查。是的,对不起。根据您的示例代码,我不知道它可能是什么。祝你好运