![](/img/trans.png)
[英]Does a model need to be explicitly passed to a view if the model is strongly bound to the view?
[英]View Model Null when not explicitly passed by controller to strongly typed view
我的观点是定义的
@model BloombergGUI.Models.SecurityViewAltModel
<div class="col-md-10">
@Html.TextArea("TestArea",Model.FieldsList)
@Html.TextAreaFor(m => m.FieldsList, new {@class = "form-control"})
</div>
如果此强类型视图的控制器定义为
public ActionResult Index()
{
return View(); //The first Html.TextArea says Model.FieldList is null
}
如果它被定义为以下,则视图中的两个语句都有效。
public ActionResult Index()
{
return View(new SecurityViewAltModel());
}
为什么当强类型视图时,Model.Property指示Model为null但是当我显式传递一个新模型()时,Model.Property工作正常。 我认为Model只是访问视图的强类型模型的另一种方式,m => m.property是用于强类型视图的TextBoxFor扩展方法的lambda表达式。
该
@model BloombergGUI.Models.SecurityViewAltModel
您在View中定义实际上是来自控制器的强类型数据传递机制。
当你这样做
return View();
你应该得到一个NULL模型。 这是因为没有数据传递给View。 模型预计为空。
当你这样做
return View(new SecurityViewAltModel());
发送非null Model对象,所有字段为null。 MVC将为这些空数据字段呈现空控件。
请注意 ,在第二种情况下,您可能无法获得Null引用异常,因为您没有处理直接的object.field引用,而是处理Expression 。
m => m.FieldsList
与Model.FieldsList
细节:
在MVC DLL内部,当处理Expression时,它具有如下逻辑:
使用Parameter评估表达式的值作为viewData.Model对象。
电话如下:
CachedExpressionCompiler.Process<TParameter, TValue>(expression)(model);
在那时,它进入FingerprintingExpressionVisitor并且它可以处理null Model并返回null响应以使Extension Helper不呈现任何数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.