我有一个局部视图,有时需要收集数据,有时只需要显示保存的数据并且不允许编辑。创建一个包含元素,其属性可以影响子元素的呈现方式
我想为这两种需求使用相同的局部视图,因为格式很复杂。但是,我不想仅将“禁用”标记应用于特定控件:我希望(在服务器端)将只读数据呈现为文本而不是控件,以便它不能被回发。
(征求意见,使事情复杂化,有一个字段,可编辑,即使是只读的所有其他领域,所以会有一个回)。
我正在考虑这个问题的一般解决方案。做最简单的事情将是下面的代码模式适用于所有领域:
@{ if(condition) {
@Html.TextBoxFor(model=>model.Field)
}
else
{
@Html.DisplayFor(model=>model.Field)
}
}
但是,这是不雅的,并可能导致难以阅读的代码。而且,由于模式必须手动应用,因此很容易出错。
我正在写一些扩展方法来补充TextBoxFor等,它将采用一个额外的参数来指示是否调用TextBoxFor或DisplayFor。
但我希望更好的是我可以设置一个包含的元素,它会自动影响子元素的呈现方式,您可以在ASP.NET WebForms Panel控件上设置Visible属性的方式。
所以现在我正在走进假设领域。为了实现这样的事情,我需要一个包含服务器端的元素(可能遵循与BeginForm相同的模式),它已经意识到它自己的范围,并且可能会影响包含渲染扩展调用的方式。
这样的事情甚至可能吗?
为什么不只是创建两个单独的视图? – 2012-01-11 21:29:08
@Shark因为视图足够复杂,格式足够复杂,所以我不想创建两件必须保持同步的东西。但是,谢谢你:一般来说这可能是最好的解决方案。 – 2012-01-13 16:30:19