ASP.NET MVC - 在我的详细信息视图中使用IF语句

时间:2017-11-24 10:53:22

标签: asp.net-mvc

我在详情视图中有这个

<tr>
   <td>@Html.DisplayNameFor(model => model.ACTION_STATUS):</td>
   <td>@Html.DisplayFor(model => model.ACTION_STATUS)</td>
</tr>

如何申请:

  

如果ACTION_STATUS ==,则显示Active Else如果ACTION_STATUS == 0,则显示Inactive,Else Deleted

2 个答案:

答案 0 :(得分:0)

我建议使用Dictionary而不是if条件。在这种情况下,做一个if条件似乎很容易,但如果有几个分支,这不是正确的方法。

Dictionary<int, string> data = new Dictionary<int, string>();
data.Add(1, "Active");
data.Add(0, "Inactive");
data.Add(-1, "Deleted");
ViewData["data"]=data;

在视图中,您可以获得它们:

@{
    var Dictionary = (Dictionary<int, string>)ViewData["data"];
 }

并将其显示为  <td>@Dictionary[model.ACTION_STATUS]</td>

我认为这个解决方案更清晰。

答案 1 :(得分:-1)

编辑:解决问题的编辑问题。

我认为最好的方法,特别是现在有3个不同的状态选项,而不仅仅是2,是做以下事情(正如我在原始答案中所推荐的那样)。

1)创建一个类似于Indrit Kello的答案的字典,但要制作静态数据&#34;你项目的某个地方。也许它是从动作状态的数据库表中加载的。也许它是从配置文件中加载的东西,或者它可能只是在名为&#34; Constants.cs&#34;的静态类中进行硬编码。等取决于具体情况。如果它是硬编码的,你可能会有一个类:

public static class Constants
{
    public static Dictionary<int, string> ActionStatuses = new Dictionary<int, string>(){
            { 1, "Active" },
            { 0, "Inactive"},
            //etc. Additional statuses go here. No comma on the final entry...
    };
}

2)向视图模型添加新属性,以解码此状态的显示文本。您可以使用属性等来装饰它,因为您可以正常的VM属性,因此您可以继续使用@ Html.DisplayFor等,

    public class MyViewModel
    {
            // Other properties etc...
            public string ActionStatusDisplayText { get { return Constants.ActionStatuses[this.ACTION_STATUS]}; }
    }

3)在您的视图中使用此新属性。

<td>@Html.DisplayFor(model => model.ActionStatusDisplayText)</td>

4)如果必须在多个不同的视图模型中进行此查找,您可能需要考虑将查找代码移动到Constants类中,以便可以与多个位置共享相同的代码。特别是如果你需要实现hte情况,因为某些原因可能不会出现在字典中(对于某些原因,值= -99等)