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

时间:2014-04-09 18:53:56

标签: c# asp.net-mvc asp.net-mvc-4 model

我知道这是一个非常愚蠢的问题,但我对它有点困惑,因为我今天回答了一个问题,我对提问者的评论感到困惑。

如果我在行动中这样做:

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

4 个答案:

答案 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

匹配

此致