return View()和return View(new Model())之间的区别
本文关键字:View return 区别 之间 new Model | 更新日期: 2023-09-27 17:57:34
我知道这是一个非常愚蠢的问题,但我有点困惑,因为我今天在回答一个问题,我在提问者的评论中感到困惑。
如果我真的喜欢这个动作:
public Action Result Index()
{
return View();
}
以及我的观点:
@model MyModel
@Html.TextBoxFor(x=>x.Name)
如果我写这样的动作:
public Action Result Index()
{
return View(new MyModel());
}
这两个操作之间的区别是什么,因为在这种情况下,我不会传递空的初始化模型,视图也会被渲染。
我在这里附上参考问题的链接:当控制器未显式传递给强类型视图时,视图模型为Null
答案归结为lambda表达式(如)
x => x.Name
工作。最后,表达式不关心您的模型是否为null,因为它计算出如何通过查看强类型类的已定义属性你已经定义了。
所以,如果你有课:
public class MyModel
{
public string Name {get; set;}
public int Age {get; set;}
.
.
.
}
然后在你的面纱中,你引用了你的模型,比如
@model MyModel
如果您查看的TextBox的来源
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>
因此表达式可以在模型类型和属性类型都已知的情况下进行评估。是否有模型的实际实例并不重要。
第一种方法
第一个代码用作一个简单的返回语句。
return View();
此代码将简单地返回当前视图。带有视图最初为其自身拥有的值和数据。
第二种方法
例如,使用代码:https://stackoverflow.com/a/17276334/1762944
而你试图使用的另一个代码中有一个新的参数
该方法将返回一个视图,但这次它将具有新的值。其他模型本身的价值。
return View(new Model());
您更可能知道class
的用法,它是使用新前缀和类名实例化的。类似地,在这里,一个新的模型被传递给视图,以更新该视图的内容。
更像是,只是一个用于更改视图中值的参数。
不同之处在于,当您在视图中使用@model
时,您并不是在创建新的实例,而只是告诉视图引擎您使用的是什么强类型模型。它仍然需要将数据从控制器传递给它。因此,通过使用return View(new MyModel())
,您将向视图传递MyModel
的默认实例。当您使用return View()
时,您正在传递视图null
。
VIEW():您在视图中没有从控制器操作方法传递任何信息。因此,尽管它是强类型的,但没有数据可以绑定到它。
VIEW(模型实例):您正在将模型实例传递给视图,该视图也将被使用,但与这里的第一个相反,数据绑定将通过我们正在使用的HTML助手来完成。+人们应该小心,你通过的视图模型应该与@model MyModel 匹配
问候