我正在研究我的第一个MVC应用程序,仍在全力以赴.
我有一个viewmodel,此时,它与我的域对象相同.我的控制器构建了viewmodel并将其传递给视图.该视图仅显示一些属性,因为我不希望为用户显示主键和/或外键,在主键的情况下,我需要拥有数据才能更新/删除数据库.
看来,除非我在视图中使用viewmodel属性,否则当我将viewmodel传回时,它将设置为默认值(0表示数值类型,null表示引用类型).这是正确的行为吗?
我确认传递给Edit视图的viewmodel确实包含了所有属性(正如我所料).
问题 - 呈现视图后,viewmodel会发生什么?如果我的viewmodel包含视图中未使用的属性,它们的值是否会消失?例如,当我单击Edit actionlink以在控制器上触发Edit操作时,传递给该操作的viewmodel不包含任何属性,除非它们在屏幕上可见.为什么?
顺便说一句,这是ASP.NET MVC 4 RC.
看来,除非我在视图中使用viewmodel属性,否则当我将viewmodel传回时,它将设置为默认值(0表示数值类型,null表示引用类型).这是正确的行为吗?
是的,当您调用控制器操作时,您需要传递要在请求中绑定的所有属性.因此,例如,如果您使用html <form>调用操作,则需要使用输入字段.您可以使用隐藏字段但它们必须存在,否则不会向控制器操作发送任何内容
问题 - 呈现视图后,viewmodel会发生什么?
它不属于范围,有资格收集垃圾.
如果我的viewmodel包含视图中未使用的属性,它们的值是否会消失?
绝对.但即使您在视图中使用这些属性,它们也会消失.例如,如果您只在视图中显示值,但在提交表单时不使用输入字段将它们发送回服务器,那么它们也将消失.
例如,当我单击Edit actionlink以在控制器上触发Edit操作时,传递给该操作的viewmodel不包含任何属性,除非它们在屏幕上可见.为什么?
因为视图模型不再存在.它消失了,垃圾收集了.这就是HTTP协议的工作原理.这是无国籍的.请求之间没有任何内容.如果要使用操作链接或其他任何内容,则必须将要填充的任何属性包含在POST表单值或查询字符串参数中.
如果用户不应该在视图中修改这些值,那么您可以简单地将id传递给控制器操作,这将允许此控制器操作从使用此id的任何位置(数据库或其他)检索模型.
| 归档时间: |
|
| 查看次数: |
2364 次 |
| 最近记录: |