Sha*_*ard 5 asp.net-mvc asp.net-mvc-3
我正在浏览一些 MVC3 教程,即 Pluralsight 视频,我正在考虑如果我们现有的应用程序被改造为 ASP.NET MVC(不是计划,但它给了我一个参考框架) )。在我们的 aspx 代码隐藏中,我们有相当多的代码看起来像这样:
if (SomeBooleanCheck){SomeControl.Visible = true;}else {SomeControl.Visible = false;}
Run Code Online (Sandbox Code Playgroud)
当然,该示例已大大简化,但假设布尔逻辑相当复杂,并假设需要发生多种事情作为使控件可见(可能更改颜色、大小、文本等)的一部分,在 ASP 中执行此操作的模式是什么? NET MVC?似乎您必须在视图本身中进行相同的布尔检查,这对我来说似乎有点难看。似乎必须有更好的方法,这肯定出现在 MS 的用例列表中,我只是没有看到答案。
根据具体情况,您可能采取的方法会有很大差异。一些选项包括:
您没有明确提及如何在条件中呈现控件。我假设你会做一个 RenderPartial。因此视图中的线条本身会非常“小”。
if(myViewModel.ComplexBoolean) // Boolean set in generation of view model
Html.RenderPartial('firstPartial')
else
Html.RenderPartial('secondPartial')
Run Code Online (Sandbox Code Playgroud)
编辑:如果您设置为“可见”的项目只是一个单独的控件,您可以直接输出该控件,例如
if(myViewModel.ComplexBoolean) {
Html.DropDownListFor(m => m.Type, Model.Types /* An IEnumerable<SelectListItem>*/, new { @class = "myList" });
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您不想设置“Model.Types”属性(例如保存数据库命中),则条件可能位于您创建视图模型的位置(控制器或某些服务/视图模型存储库) 。然后视图可以只检查属性是否存在:
if(Model.Types != null) {
Html.DropDownListFor(m => m.Type, Model.Types /* An IEnumerable<SelectListItem>*/, new { @class = "myList" });
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |