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

时间:2014-01-11 12:10:41

标签: c# asp.net-mvc

我正在读一本关于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框架本身已经创建了模型对象。 如果这样可以,那么它被认为是一种好习惯吗?

1 个答案:

答案 0 :(得分:1)

defensive coding角度来看,当您实现接受参数的函数时,您的函数不应假设 参数始终有效({{1}是一个无效的例子。

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

  

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

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