簡體   English   中英

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

[英]Why don't we need to return View(new Person()) in HttpGet Create?

我注意到幾乎所有找到的代碼都只是return View(); [HttpGet] Create操作方法。 我想知道為什么我們不需要return View(new Person())例如?

我不確定您正在查看的代碼是什么,但是如果我返回的視圖需要一個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調用來實現的。 在那種情況下,視圖幾乎是一個“啞殼”,其上的控件正在繁重地工作。

當模型為null時,在剃刀視圖模板中使用的大多數默認構造(例如Html.EditorForHtml.LabelFor等)都可以使用。 他們可以訪問模型的類類型的元數據來執行諸如顯示標簽或確定值的所需格式之類的任務。 當模型實例為null時,它們僅使用空值(空字符串,0,false)作為該值。

因此,您所看到的代碼(在沒有模型實例的情況下調用View)只會在視圖模板中存在代碼手動嘗試訪問模型實例而不檢查其是否為null時遇到麻煩。

我仍然認為,最佳做法是在調用視圖以創建新對象時傳遞Model或ViewModel類型的新實例。 這樣,在Model或ViewModel的構造函數中設置的默認值或之前在控制器操作中設置的值將不會丟失並在視圖中使用。 同樣,當修改視圖模板的人決定訪問模型實例而沒有空檢查時,也不會有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM