我正在读一本关于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框架本身已经创建了模型对象。 如果这样可以,那么它被认为是一种好习惯吗?
答案 0 :(得分:1)
从defensive coding角度来看,当您实现接受参数的函数时,您的函数不应假设 参数始终有效({{1}是一个无效的例子。
在我看来,Asp.net mvc遵循这些最佳实践,并在您将null
作为视图模型传递时尝试避免异常。
我只是想知道创建视图对象真的很有必要 调用视图时的模型?
我认为有必要使用自定义逻辑来初始化对象,并且需要将该对象传递给视图。在我看来,我们应该总是传递我们需要的对象,这在代码中更清晰,并且避免依赖于方法中的防御逻辑。该方法的防御性逻辑是保护方法免受无效参数的影响,有时无法按预期工作。