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个模型初始化有什么不同吗?
var model = new AboutModel
是隐式类型变量,因为您不必事先指定变量的类型,编译器可以通过=后面的内容来推断它。(本例中为AboutModel
)
如果使用隐式类型变量,则必须给它一个值,例如:
var model = new AboutModel;
可以编译,但是
var model;
不会。
AboutModel model = new AboutModel
在变量声明中指定类型,如果在同一行中给它一个值,则不需要这样做。如果你在声明时给它一个类型,你不需要给它一个值。例如:
AboutModel model;
将编译。
dynamic
关键字意味着它不会在编译时进行类型检查,在这种情况下也不会有任何区别。
不,三种情况下的运行时类型都是MvcApp.Models.AboutModel
。
在前两种情况下,您按原样传递类型,在最后一种情况下,将其作为动态传递,这将试图转换为由@model
指令定义的视图的类型。
为了清晰起见,我会坚持使用强类型初始化,除非您需要"动态性"(在这种情况下,您将希望将@model
类型也设置为dynamic
)。