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

return View()和return View(new Model())之间的区别

答案归结为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 匹配

问候