Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该总是初始化视图模型对象吗?_C#_Asp.net Mvc - Fatal编程技术网

C# 我应该总是初始化视图模型对象吗?

C# 我应该总是初始化视图模型对象吗?,c#,asp.net-mvc,C#,Asp.net Mvc,我正在读一本关于ASP.NETMVC4的书,我有一个小问题。 这是视图模型 public class SignupViewModel { public string Username { get; set; } public string Password { get; set; } public string Password2 { get; set; } public string Email { get; set; } } 本书作者建议创建这种类型的对象,

我正在读一本关于ASP.NETMVC4的书,我有一个小问题。 这是视图模型

public class SignupViewModel
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string Password2 { get; set; }
    public string Email { get; set; }
}
本书作者建议创建这种类型的对象,以便从控制器调用视图

    public ActionResult Index()
    {
        if (!Security.IsAuthneticated)
        {
            return View("SignupPge", new SignupViewModel());
        }

    }
视图本身是强类型的

    @model SignupViewModel
    <p>
        @using (var signupForm = Html.BeginForm("Signup", "Account"))
        {
            @Html.TextBoxFor(m => m.Email, new { placeholder = "Email" })
            @Html.TextBoxFor(m => m.Username, new { placeholder = "Username" })
            @Html.PasswordFor(m => m.Password, new { placeholder = "Password" })
            @Html.PasswordFor(m => m.Password2, new { placeholder = "Confirm Password" })

            <input type="submit" value="Create Account" />
        }
    </p>
}
@model SignupViewModel

@使用(var signupForm=Html.BeginForm(“注册”、“帐户”))
{
@Html.TextBoxFor(m=>m.Email,新的{placeholder=“Email”})
@Html.TextBoxFor(m=>m.Username,新的{placeholder=“Username”})
@Html.PasswordFor(m=>m.Password,新的{placeholder=“Password”})
@Html.PasswordFor(m=>m.Password2,新的{placeholder=“Confirm Password”})
}

}
我只是想知道,在调用视图时,创建视图模型的对象真的需要这样做吗? 事实上,我尝试将null作为模型对象传递,并且一切都很好地工作。我猜MVC框架已经创建了模型对象本身。 如果这是可以的,那么它被认为是一种好的做法吗?

从不同的角度来看,当您实现一个接受参数的函数时,您的函数不应该假定参数总是有效的
null
是一个无效的例子)

在我看来,Asp.net mvc遵循这些最佳实践,并试图在将
null
作为视图模型传递时避免异常

我只是想知道,创建视图对象真的需要这样做吗 调用视图时使用模型


我认为有必要使用自定义逻辑来初始化对象,并且需要将该对象传递给视图。在我看来,我们应该始终传递我们需要的对象,这在代码中更清晰,并且避免依赖方法中的防御逻辑。该方法中的防御逻辑是保护该方法不受无效参数的影响,有时无法按预期工作。

不创建该对象有什么好处?那么,我可以调用View(“SignupPage”),而不用为创建该对象而烦恼。我只是不确定这是否是一个好的做法。