MVC 5:如何在视图中显示字符串而不是数字

时间:2017-06-13 22:33:07

标签: c# asp.net-mvc entity-framework-6 asp.net-mvc-5

我对此嗤之以鼻。在.NET 4.5.1和Entity FrameWork 6.1.3上使用MVC 5。我从一个Oracle数据库开始。

有一个名为Activity的字段,当前是十进制字段。我想展示" Inactive"或者"活跃"取决于它是0还是1.

我可以在带有If语句的View中执行此操作,但我有索引,编辑,详细信息和创建的视图,我必须修改,在编辑和创建视图的情况下,我需要获取输入并将其转换回小数。

有更简单的方法吗?

型号:

@if (Html.DisplayFor(modelItem => item.ACTIVE).Equals("0"))
{
   @:Inactive
}
else
{
   @:Active
}

查看:

import os
for file in os.listdir(path)
    df = pd.read_csv(path+file)
    // do stuff

3 个答案:

答案 0 :(得分:1)

通过利用HTML帮助程序,您可以减少创建标准HTML页面时必须执行的HTML标记的繁琐输入量

符合您要求的示例代码:

在您的视图中:

Dim query As String = String.Empty


query &= "DECLARE @TaskID nvarchar(8), @Task nvarchar(50), @Start_date datetime, @Due_date datetime, @Complete bit, @Task_Manager nvarchar(8), @JRID nvarchar(10), @Entered_By char(50), @Time_Entered datetime;"
query &= "MERGE INTO schedule USING (VALUES (@TaskID, @Task, @start_date, @Due_Date, @Complete, @Task_Manager, @JRID, @Entered_By, @Time_Entered)) AS t(TaskID, Task, start_date, Due_Date, Complete, Task_Manager, JRID, Entered_By, Time_Entered) "
query &= "ON schedule.TaskID = @TaskID WHEN MATCHED THEN"
query &= " UPDATE SET schedule.TaskID = t.TaskID, schedule.Task=t.Task, schedule.start_date=t.start_date, schedule.due_date=t.due_date, schedule.complete=t.complete, schedule.task_manager=t.task_manager, "
query &= "schedule.JRID=t.JRID, schedule.Entered_by=t.Entered_by, schedule.Time_Entered=t.Time_Entered"
query &= " WHEN NOT MATCHED THEN INSERT (TaskID, Task, start_date, Due_Date, Complete, Task_Manager, JRID, Entered_By, Time_Entered)"
query &= " VALUES (@TaskID, @Task, @start_date, @Due_Date, @Complete, @Task_Manager, @JRID, @Entered_By, @Time_Entered);"


Using conn As New SqlConnection(dbLocations(0, 1))
    Using comm As New SqlCommand()
        With comm
            For Each row As DataGridViewRow In MainSchedule.DataGridView1.Rows
                If Not (row.Cells(0).Value = Nothing) Then
                    .Parameters.Clear()
                    .Connection = conn
                    .CommandType = CommandType.Text
                    .CommandText = query
                    insertcommand.Parameters.AddWithValue("@TaskID", TNn)
                    insertcommand.Parameters.AddWithValue("@Complete", "False")
                    insertcommand.Parameters.AddWithValue("@Task", row.Cells(0).Value)
                    insertcommand.Parameters.AddWithValue("@Start_date", row.Cells(1).Value)
                    insertcommand.Parameters.AddWithValue("@Due_Date", row.Cells(2).Value)
                    insertcommand.Parameters.AddWithValue("@JRID", txtJRID.Text)
                    insertcommand.Parameters.AddWithValue("@Task_Manager", row.Cells(3).Value)
                    insertcommand.Parameters.AddWithValue("@Entered_By", GetUserName())
                    insertcommand.Parameters.AddWithValue("@Time_Entered", Now)
                    NextTask()
                End If
            Next
        End With
        conn.Open()
        comm.ExecuteNonQuery()
   End Using
End Using

帮助程序扩展代码:

@Html.ActiveOrInactive(item.ACTIVE)

注意:没有测试代码并希望它能够正常工作

有关Helper扩展程序的详细信息https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/views/creating-custom-html-helpers-cs

答案 1 :(得分:0)

在Model中,对于decimal属性,你可以为set和get编写自定义代码,不需要对视图进行任何更改。

    get
    {
        return this.isActive==1? "Active":"InActive";
    }
    set
    {
        this.isActive = value=="Active"?1:0;
    }

另外,对这个属性使用enum!

答案 2 :(得分:0)

您可以创建一种从小数转换为字符串的方法,反之亦然,并在View和/或Controller上使用它。

public static string DisplayStatus(decimal? number)
{
    return number == 1 ? "Active" : "Inactive";
}

public static decimal ConvertStatus(string status)
{
    return status == "Active" ? 1 : 0;
}