我试图避免重复某些模板,假设我有以下(非常简化)模板:
<div class="same-template">
@(button?.buttonLeft.Url)
</div>
<div class="same-template">
@(button?.buttonRight.Url)
</div>
我也有一个按钮右模板,所以我的问题是,有没有办法可以通过按钮的“侧面”,并访问该属性?我知道在javascript中我会做类似的事情:
@(button?.button"+side+".Url)
但显然我们没有使用javascript。
我尝试过创建辅助函数
@helper GetFooter(Object button, String side) {
<div class="same-template">
<!-- don't know what to do here... -->
@(button?.button<side>.Url)
</div>
}
@GetFooter(button, "Right")
我希望这很清楚!
修改
我已经完成了以下功能,但是在var b
行上有一些失败,出现以下错误:
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
@functions{
public dynamic GetNestedDynamicValue(IContentCardItem cardItem, String first, String second) {
var b = cardItem?.GetType().GetProperty(first).GetValue(cardItem, null);
var c = b?.GetType().GetProperty(second).GetValue(b, null);
return c;
}
}
答案 0 :(得分:1)
C#是键入的,不提供像JavaScript这样的功能。无论如何,你可以尝试类似下面的例子,通过名字来恐怖地阅读财产价值:
<div>
@(button?.GetType().GetProperty("PropertyNameWhichYouNeed").GetValue(button, null))
</div>
更新:
好的,我认为你需要一些扩展方法,但首先尝试一下:
button?.GetType().GetProperty("buttonRight").GetValue(button, null)
.GetType().GetProperty("Url").GetValue(
button?.GetType().GetProperty("buttonRight").GetValue(button, null),
null);
它变得令人困惑:)我不喜欢这种UI,但试着解释一下:
我第一次检索buttonRight
属性的类型。然后我检索类型Url
并提供buttonRight
实例的类型。
应该按以下几行划分:
var buttonRight = button.GetType().GetProperty("buttonRight").GetValue(button, null);
var url = buttonRight.GetType().GetProperty("Url").GetValue(buttonRight, null);
现在url
是你看的价值。请看小提琴是如何工作的: