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

5

我正在阅读一本关于ASP.NET MVC 4的书,有一个小问题需要解答。以下是视图模型:

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>
}

我想知道在调用视图时创建视图模型对象是否真的必要?事实上,我尝试将模型对象传递为null,一切工作得很完美。我猜MVC框架已经自行创建了模型对象。如果这是可以的,那么它被认为是一个好习惯吗?


不创建该对象有什么好处? - Steven
那么,我只需要调用View("SignupPage"),而不必费心创建对象。我只是不确定这是否是一个好的实践。 - Alexei Pancratov
1个回答

1
从防御性编程的角度来看,当您实现接受参数的函数时,您的函数不应假设参数始终有效(例如,null是无效的示例)。
在我看来,Asp.net mvc 遵循这些最佳实践,尽量避免当您将 null 作为视图模型传递时出现异常。

我想知道在调用视图时创建视图模型对象是否真的有必要?

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接