C# 当数据库中没有可用数据时,MVC放置值的正确方式是什么?

C# 当数据库中没有可用数据时,MVC放置值的正确方式是什么?,c#,asp.net-mvc,database,C#,Asp.net Mvc,Database,我正在开发一个示例代码,我希望以适当的方式使用100%MVC技术 我有一个从数据库请求数据的视图,如果数据存在,则将显示该视图,否则将显示一些其他值: 观点: <table> <tr> <td>Status: </td> <td> <input type="text" name="txtStatus" value="@Model.Sta

我正在开发一个示例代码,我希望以适当的方式使用100%MVC技术

我有一个从数据库请求数据的视图,如果数据存在,则将显示该视图,否则将显示一些其他值:

观点:

<table>
        <tr>
            <td>Status: </td>
            <td>
                <input type="text" name="txtStatus" value="@Model.StatusChoice.FirstOrDefault().CurrentStatus" />
            </td>
        </tr>
</table>
模型:

public List<RequestedStatusC> GetStatus(DB_Entities DB, string CurrentStatus)
{            
    List<RequestedStatusC> SR = new List<RequestedStatusC>();
    SR = DB.Database.SqlQuery<RequestedStatusC>(@"SELECT CurrentStatus
                                                    FROM MyTable
                                                    WHERE CurrentStatus = {0}
                                                    ORDER BY StatusKey", CurrentStatus).ToList();
    if (!SR.Any()) SR.Add(new RequestedStatusC { CurrentStatus = (CurrentStatus == "" ? "Missing" : CurrentStatus) });
    return SR;
}
public List GetStatus(DB_Entities DB,string CurrentStatus)
{            
List SR=新列表();
SR=DB.Database.SqlQuery(@“选择当前状态
从MyTable
其中CurrentStatus={0}
按状态键排序”,CurrentStatus).ToList();
if(!SR.Any())SR.Add(new RequestedStatusC{CurrentStatus=(CurrentStatus==“”?“缺少”:CurrentStatus)});
返回SR;
}

这是正确的方式吗?特别是在模型中使用
if(!SR.Any())

时,您必须尝试以下代码

<table>
        <tr>
            <td>Status: </td>
            <td>
if(@Model.StatusChoice.FirstOrDefault() != null && @Model.StatusChoice.FirstOrDefault().CurrentStatus != ""){
                <input type="text" name="txtStatus" value="@Model.StatusChoice.FirstOrDefault().CurrentStatus" />
}
else{
<input type="text" name="txtStatus" value="Missing" />
}
            </td>
        </tr>
</table>

地位:
if(@Model.StatusChoice.FirstOrDefault()!=null&&@Model.StatusChoice.FirstOrDefault().CurrentStatus!=“”){
}
否则{
}
在您的模型中,删除if条件

public List<RequestedStatusC> GetStatus(DB_Entities DB, string CurrentStatus)
{            
    List<RequestedStatusC> SR = new List<RequestedStatusC>();
    SR = DB.Database.SqlQuery<RequestedStatusC>(@"SELECT CurrentStatus
                                                    FROM MyTable
                                                    WHERE CurrentStatus = {0}
                                                    ORDER BY StatusKey", CurrentStatus).ToList();
    //if (!SR.Any()) SR.Add(new RequestedStatusC { CurrentStatus = (CurrentStatus == "" ? "Missing" : CurrentStatus) });
    return SR;
}
public List GetStatus(DB_Entities DB,string CurrentStatus)
{            
List SR=新列表();
SR=DB.Database.SqlQuery(@“选择当前状态
从MyTable
其中CurrentStatus={0}
按状态键排序”,CurrentStatus).ToList();
//if(!SR.Any())SR.Add(new RequestedStatusC{CurrentStatus=(CurrentStatus==“”?“缺少”:CurrentStatus)});
返回SR;
}

删除模型中的if条件,在视图中添加if条件

@if (Model.StatusChoice != null)
{<table>...</table>}
@if(Model.StatusChoice!=null)
{...}

代码运行良好,但我想充分利用MVCMVC与数据库访问无关的优势。您发布的“模型”实际上是一种数据访问方法,它绕过EF直接对数据库执行ADO.NET查询。如果
MyTable
映射到一个实体(它应该映射),为什么不编写
DB.SomeEntities.Where(entity=>entity.CurrentStatus==CurrentStatus).ToList()
?`在我看来,没有一种特定的MVC方法来实现这一点。我通常喜欢在模型之外保留任何验证检查,并让控制器做出此类决策。如果模型为空,则显示一个视图或另一个视图。也不要在视图级别放太多逻辑,因为它不是单元可测试的。这些只是一些提示,但其余的则取决于您希望应用程序上的用户体验如何。这非常适合代码审阅交换。如果您希望以mvc方式进行操作,那么您肯定不会以这种方式生成输入—您使用HtmlHelper方法生成表单控件
@if (Model.StatusChoice != null)
{<table>...</table>}