我知道这是一个非常愚蠢的问题,但我对它有点困惑,因为我今天回答了一个问题,我对提问者的评论感到困惑。
如果我在行动中这样做:
public Action Result Index()
{
return View();
}
和我的观点:
@model MyModel
@Html.TextBoxFor(x=>x.Name)
如果我写这样的动作:
public Action Result Index()
{
return View(new MyModel());
}
这两个动作之间的区别是什么,因为在这种情况下我没有传递空的初始化模型,也会呈现视图。
我在这里附上链接以及参考问题: View Model Null when not explicitly passed by controller to strongly typed view
答案 0 :(得分:2)
第一个代码用作简单的return语句。
return View();
此代码只返回当前视图。使用视图最初为其自身的值和数据。
例如代码为:https://stackoverflow.com/a/17276334/1762944
而您正在尝试使用的其他代码中包含一个新参数。
该方法将返回一个视图,但这次它将具有新值。其他模型自身的价值。
return View(new Model());
您更有可能知道class
的使用情况,使用新前缀然后使用类名称即可立即使用{{1}}。同样,这里将一个新模型传递给View以更新该视图的内容。
更像是,只是一个更改视图中值的参数。
答案 1 :(得分:2)
答案归结为lambda表达式如
x => x.Name
的工作。最后,表达式并不关心你的模型 是否为null,因为它计算出如何呈现文本框 查看强类型类的已定义属性 你定义了。
所以如果你上课了:
public class MyModel
{
public string Name {get; set;}
public int Age {get; set;}
.
.
.
}
然后在你看来你引用你的模型
@model MyModel
如果你看一下TextBoxFor的来源
TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
使用通用类型。所以,因为你有一个带有
的强类型视图@model MyModel
类型TModel是MyModel并与HtmlHelper一起使用。还
Expression<Func<TModel, TProperty>> expression
由
组成Func<In TModel, Out TProperty>
因此表达 可以使用已知的模型类型和属性类型进行评估。无论您是否拥有模型的实际实例都无关紧要。
答案 2 :(得分:1)
不同之处在于,当您在视图中使用@model
时,您并未创建新实例,您只是告诉视图引擎您正在使用的强类型模型。它仍然需要从控制器传递给它的数据。因此,使用return View(new MyModel())
,您将视图传递为MyModel
的默认实例。当您使用return View()
后,您传递了自己的观点null
。
答案 3 :(得分:0)
VIEW():您在控制器操作方法中没有传递任何内容。因此,尽管它是强类型的,但没有数据可以绑定到它。
VIEW(模型实例):您正在将模型实例传递给将要使用的视图,但与此处的第一个相反,数据绑定将通过我们正在使用的HTML帮助程序完成。 +应该注意你传递的视图模型应该与@model MyModel
匹配此致