C# 当数据库中没有可用数据时,MVC放置值的正确方式是什么?
我正在开发一个示例代码,我希望以适当的方式使用100%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
<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>}