显然,现实应用程序要复杂得多,但为了这个例子,我可以说我有以下简单的视图,我需要保存用户:
@model UserViewModel
@Html.TextBoxFor(model=>model.FirstName)
</br>
@Html.TextBoxFor(model=>model.MiddleName)
</br>
@Html.TextBoxFor(model=>model.LastName)
提交后,有两种方法可以在控制器级别接收它:
1)
public ActionResult(UserViewModel user)
{
var myUser = new User();
myUser = user.FirstName;
myUser = user.MiddleName;
myUser = user.LastName;
}
和
2)
public ActionResult(FormCollection collection)
{
var myUser = new User();
myUser = collection.Get("FirstName");
myUser = collection.Get("MiddleName");
myUser = collection.Get("LastName");
}
问题:是否有理由使用一种方法而不是另一种方法?还有一些开发人员告诉我,第二种方法是首选。传递对象像第一个例子中所示的整个对象并不是一个好主意。为什么?
答案 0 :(得分:1)
简短回答:两者都有效,两者都有效。
长期自以为是的回答:我更喜欢第一个,
您可以使用AutoMapper 。它将为您绘制大多数具有相似名称的字段,并要求您定义其余字段。在这里你根本不必逐场移动(见下文)。但是,您必须在第二种方法中逐一进行。 当你完成映射时(这也很简单),它看起来像这样:
public ActionResult(UserViewModel user)
{
var myUser = Mapper.Map<User, UserViewModel>(user);
}
难道不是美女吗?
我真的没有看到任何理由为什么选项2优先于1 ... 我猜他们有他们的理由。它就像COBOL vs. C ++。 :))
但这确实是个人决策和风格。 没有正确答案。
希望这有帮助。