Asp.net mvc 试图使用“逻辑”;或;内;ViewData";

Asp.net mvc 试图使用“逻辑”;或;内;ViewData";,asp.net-mvc,Asp.net Mvc,我使用ViewData将参数传递给局部视图,但是有时不需要传递参数。在这种情况下,我只是希望它回到默认状态 所以实际视图通常是这样的 <div> @Html.Partial( "templates/form/slots", new ViewDataDictionary { { "slots", "First.Slots" } }) </div> 但这不起作用,引用错误 “| |”运算符不能应用于“object”和“string”的实例 我知道我很接近了,我只是在为

我使用
ViewData
将参数传递给局部视图,但是有时不需要传递参数。在这种情况下,我只是希望它回到默认状态

所以实际视图通常是这样的

<div>
   @Html.Partial( "templates/form/slots", new ViewDataDictionary { { "slots", "First.Slots" } })
</div>
但这不起作用,引用错误

“| |”运算符不能应用于“object”和“string”的实例


我知道我很接近了,我只是在为剃须刀的确切语法而挣扎。有没有一种方法可以在不扭曲和使用全尺寸扩展方法的情况下获得这种表达式?

您要寻找的是逻辑or,而不是逻辑or

<select ng-model="@( ViewData["slots"] ?? "Model.Slots" )"></select>


与Javascript(和其他动态语言)不同,在Javascript中,构造
object | | default
是合法的,C#的键入系统不允许这样做,因为它需要布尔操作数。
??
运算符虽然做了您想要的事情,但如果第一个操作数为
null

是,它会返回到第二个操作数!就是那个!非常感谢。将在11分钟计时结束后立即奖励积分。我只是把剃刀的语法弄糟了。对我来说,记住什么时候使用razor中的
@
和括号的组合是相当令人困惑的。我之所以要这样做,是因为我做了很多局部视图只是为了分割组件,因为我在很多地方重复使用它们。大多数时候,我希望他们查看模型的根-但是我遇到了一种情况,我需要在嵌套结构中使用一些小部件,因此我需要能够选择性地为部分视图的特定呈现定义“根”。这工作做得很好!虽然现在我这么说了,但它并不像我想要的那样工作。但这是另一个问题。2分钟后,我可以为这一个奖励学分。再次感谢。您可能希望使用合并空运算符
,而不是
| |
,因为or是布尔值(另外,您必须确保两个操作数都是兼容类型,因此必须强制转换对象)。那么试试
viewdata[“slots”]??“Model.Slots”
。你不需要投。合并null选择第一个非null值。
<select ng-model="@( ViewData["slots"] || "Model.Slots" )"></select>
<select ng-model="@( ViewData["slots"] ?? "Model.Slots" )"></select>