我正在尝试使用在线资源教自己MVC 6,但他们并不总是涵盖我想要学习的内容。如果我对那些应该相当明显的东西一无所知,我会道歉。
在这种情况下,我使用以下方法将数据传递给视图:
public ActionResult Index(int? id)
{
foreach (Customer c in _cList)
{
if (c.Id == id)
{
return View(c);
}
}
return View(new Customer());
}
使用空模型返回视图是处理foreach搜索的“无匹配id”结果的最佳方法吗?
视图然后调用模型:
@if (Model.Id != 0)
{
<P> @Model.Name </P>
<P> @Model.Email </P>
}
else
{
<P> Nothing found!</P>
}
虽然它确实有效,但我想知道这是否是处理这个问题的正确方法。 感觉有点......哈哈。创建一个空模型只是为了返回一个不会导致空指针异常的对象?
虽然它不应该是必要的信息 - _cList被声明为private readonly List<Customer> _cList = new List<Customer>()
作为内联伪数据库 - 对于那些通过谷歌发现这个并且很好奇的人。它使foreach工作,从而简化了搜索。在实际的SQL Query搜索中并不理想。标量函数可能是您必须使用的函数。
答案 0 :(得分:1)
你错过了一个更大的问题。 MVC是Model,View(ViewModel)和Controller。
MVC 中的控制器应返回描述模型的ViewModel,而不是它自己的模型。
更合适的实现将创建一个ViewModel,它将反映视图的模型。
<强>视图模型强>
public class SomeViewModel
{
public Customer Customer { get; set; }
public string Error { get; set; } // Or a boolean HasErrors property.
}
<强>控制器强>
public ActionResult Index(int? id)
{
var foundController = _cList.FirstOrDefault(c => c.Id == id);
var viewModel = new SomeViewModel
{
Customer = foundController
};
if (foundController == null)
{
viewModel.Error = "No matches found!"
}
return View(viewModel);
}
查看强>
@model SomeViewModel
@if (Model.Error == null)
{
<P> @Model.Error</P>
}
else
{
<P> @Model.Name </P>
<P> @Model.Email </P>
}
在您的页面上没有太大的变化,您可以验证是否有错误。当然,在这种情况下,您应该将Customer留空。
此解决方案将为您提供更大的灵活性,您可以根据需要添加任意数量的属性来描述页面需求。
注意:代码尚未经过测试。