为什么我们不需要在HttpGet Create中返回View(new Person())?

时间:2019-08-01 16:35:53

标签: c# asp.net-core

我注意到在return View();操作方法中发现的几乎所有代码仅是[HttpGet] Create。我想知道为什么我们不需要return View(new Person())

2 个答案:

答案 0 :(得分:2)

我不确定您要查看的代码是什么,但是如果我返回的视图需要一个ViewModel,则在调用该视图时,我几乎总是会包含viewmodel对象。

    public ActionResult ViewTime(int id, DateTime? from, DateTime? to)
    {
        var viewTimeModel = _repository.ViewTime_Read(User, from, to, id);
        return View(viewTimeModel);
    }

该视图中可能包含一些动态控件,例如网格等,这些控件负责获取自己的数据,可能是通过对json的控制器方法的JavaScript调用来实现的。在那种情况下,视图几乎是一个“哑壳”,并且其上的控件正在繁重地工作。

答案 1 :(得分:2)

当模型为null时,您在剃刀视图模板中使用的大多数默认构造(例如id | parent_id -------------- 1 | 0 3 | 1 2 | 0 4 | 0 5 | 0 7 | 5 6 | 0 Html.EditorFor等)都会起作用。他们可以访问模型的类类型的元数据来执行诸如显示标签或确定值的所需格式之类的任务。当模型实例为null时,它们只使用一个空值(空字符串,0,false)作为该值。

因此,您所看到的代码(在没有模型实例的情况下调用视图)只会在视图模板中存在代码手动尝试访问模型实例而不检查其是否为空的情况下出现麻烦。

我仍然认为,最佳做法是在调用视图以创建新对象时传递Model或ViewModel类型的新实例。这样,在Model或ViewModel的构造函数中设置的默认值或之前在控制器操作中设置的值将不会丢失并在视图中使用。而且,当修改视图模板的人决定访问模型实例而没有空检查时,也不会有问题。