MVC视图中的动态类型有点奇怪

本文关键字:类型 动态 视图 MVC | 更新日期: 2023-09-27 18:13:54

在这里用MVC敲我的头

我把我的模型写成:

public class AboutModel
{
    public string AboutText { get; set; }
}

和my controller as

    public ActionResult About()
    {
        var model = new AboutModel { AboutText = "We build better software."};
        return View(model);
    }

并将new行更改为:

    AboutModel model = new AboutModel { AboutText = "We build better software."}

,最后到:

   dynamic model = new AboutModel { AboutText = "We build better software."}

似乎与我的View完美配合:

@model MvcApp.Models.AboutModel
<p>@if (Model != null)
{
    @Model.AboutText
}</p>

我的3个模型初始化有什么不同吗?

MVC视图中的动态类型有点奇怪

var model = new AboutModel是隐式类型变量,因为您不必事先指定变量的类型,编译器可以通过=后面的内容来推断它。(本例中为AboutModel)

如果使用隐式类型变量,则必须给它一个值,例如:

var model = new AboutModel;

可以编译,但是

var model;

不会。

AboutModel model = new AboutModel在变量声明中指定类型,如果在同一行中给它一个值,则不需要这样做。如果你在声明时给它一个类型,你不需要给它一个值。例如:

AboutModel model;

将编译。

dynamic关键字意味着它不会在编译时进行类型检查,在这种情况下也不会有任何区别。

不,三种情况下的运行时类型都是MvcApp.Models.AboutModel

在前两种情况下,您按原样传递类型,在最后一种情况下,将其作为动态传递,这将试图转换为由@model指令定义的视图的类型。

为了清晰起见,我会坚持使用强类型初始化,除非您需要"动态性"(在这种情况下,您将希望将@model类型也设置为dynamic)。