在MVC 3应用程序的“编辑视图”中删除自动生成的字段,然后填充相应的属性

时间:2011-12-29 12:56:49

标签: asp.net-mvc-3

我的MVC 3应用程序中有一个名为Camera的对象。我创建了一个控制器动作和一个视图来编辑Camera对象。我遇到了一些问题,如果有人帮助过我,我会很感激。以下是编辑操作方法:

public ActionResult CameraEdit(int cid)
{
...
}

[HttpPost]
public ActionResult CameraEdit(Camera camera, HttpPostedFile file)
{
...
}

1- Camera类有一些我不想在编辑视图中显示的属性(例如createdDate)。所以我从布局中删除了自动生成的标签。问题是当我使用TryUpdateModel来更新HttpPost版本的Edit action方法中的Camera对象(它接受Camera对象作为第一个参数)时,我取出的那些属性将不会被填充并将被设置为null。我该如何解决这个问题?我知道MVC框架尽力通过基于name属性搜索表单字段来填充属性,因此当它找不到任何名为'createdDate'的文本框时,它无法填充此属性。但是我该如何隐藏这个不受欢迎的领域?这里的事情有点矛盾!

2-My Camera类有一个Image属性,用于存储图像的路径。在编辑表单上,我想放一个文件上传,就像上面的情况一样,我删除了布局中自动生成的标签,而是放了一个html文件输入。如果在运行时上载文件,我如何将Camera对象的Image属性(Edit方法的第一个属性)设置为用户输入的新路径?

1 个答案:

答案 0 :(得分:0)

使用视图模型。因此,不要让您的编辑操作通过并获取Camera对象,而是让它们通过并获取EditCameraViewModel对象。这是一个您将定义的类,它将仅包含编辑摄像机和此特定视图所需的内容。即使上传的文件也可能是您的视图模型的属性,因此您没有POST控制器操作需要2个参数。显然,现在视图将强烈地键入视图模型而不是域模型。

然后在您的控制器内部动态映射域模型和视图模型之间。我个人使用AutoMapper来简化这种映射。

通过这种方式,您可以将所有自动生成的EF,特定内容保留在DAL层中,而不必在前端中使用它。

相关问题