【问题标题】:Difference between return View() and return View(new Model())return View() 和 return View(new Model()) 的区别
【发布时间】:2014-04-09 18:53:55
【问题描述】:

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

如果我在行动中这样做:

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

【问题讨论】:

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


    【解决方案1】:

    答案归结为 lambda 表达式如

    x => x.Name
    

    工作。最后,表达式并不关心你的模型 是否为空,因为它计算出如何通过以下方式呈现文本框 查看强类型类的定义属性 你已经定义了。

    如果你有课:

    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】:

      第一种方法

      第一个代码用作简单的返回语句。

      return View();
      

      此代码将简单地返回当前视图。使用视图最初拥有的值和数据。

      第二种方法

      例如代码:https://stackoverflow.com/a/17276334/1762944

      而您尝试使用的其他代码中包含一个新参数。

      该方法将返回一个视图,但这次它将具有新值。其他模型为自己所拥有的价值。

      return View(new Model());
      

      您更有可能知道class 的用法,它使用新前缀和类名进行实例化。同样,这里将一个新模型传递给视图以更新该视图的内容。

      更像,只是一个用于更改视图中值的参数。

      【讨论】:

        【解决方案3】:

        不同之处在于,当您在视图中使用@model 时,您并没有创建它的新实例,您只是告诉视图引擎您是什么强类型模型使用。它仍然需要将数据从您的控制器传递给它。因此,通过使用return View(new MyModel()),您将向视图传递MyModel 的默认实例。当您使用return View() 时,您正在传递您的视图null

        【讨论】:

        • 如果我只是返回 view() 为什么如果模型为 null 时会呈现视图。
        【解决方案4】:

        VIEW () : 您没有从控制器操作方法传递任何视图。因此,尽管它是强类型的,但没有数据可以绑定到它。

        VIEW(模型实例):您将模型实例传递给也将使用的视图,但与这里的第一个相反,数据绑定将通过我们正在使用的 HTML 助手完成。 +请注意您传递的视图模型应该与@model MyModel匹配

        问候

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-01
          • 1970-01-01
          • 2013-10-03
          • 2012-11-22
          • 1970-01-01
          • 1970-01-01
          • 2013-06-02
          • 2013-12-25
          相关资源
          最近更新 更多