2013-07-03 32 views
7

当使用EditorTemplate时,如果我想让模型上的值显示在屏幕上,并且还要发送回控制器,我应该使用什么帮助器?ASP.Net MVC将标签值回发给您的控制器

即。如果我使用TextBoxFor:

@Html.TextBoxFor(model => model.RoomTypeName) 

...那么用户可以修改文字...

我宁愿只显示文本,但如果我使用:

@Html.DisplayTextFor(model => model.RoomTypeName) 

。 ..然后这不是回发给控制器。

所以我是可以显示文本,并确保我的模型状态是有效的,添加第二个隐藏字段,例如,唯一的办法:

@Html.DisplayTextFor(model => model.RoomTypeName) 
@Html.HiddenFor(model => model.RoomTypeName) 

我知道的作品,但我想知道是否有一种更优雅的方式 - 这样我就可以显示值并将其发回,而不需要将其作为隐藏元素复制?

谢谢

马克

+2

使用'HiddenFor'已经非常优雅和标准的这些东西。 – sed

+0

好的,谢谢史蒂夫 - 我认为MVC/C#可能有一个“一个帮手适合所有” - 但如果这是答案,那么请张贴它,我会标记是这样的。干杯,马克 – Mark

+1

从外观上看,你可能想重新考虑你的UI逻辑。将“一切”(包含标签)发回到网络服务器是一种WebForms类型的事情。在MVC中,仅回发必要的内容并简单地从数据库/缓存中检索所需的值是非常标准的。再次,_might_,我不知道你的全部情况,并且可能有一个合理的理由来实现这种逻辑。 –

回答

12
@Html.DisplayTextFor(model => model.RoomTypeName) 
@Html.HiddenFor(model => model.RoomTypeName) 

这是非常干净和标准做你想要达到什么样的方式。

如果你想让自己的HTML助手做完全相同的事情,那么通过保存一行就会混淆其他可能会在将来阅读你的代码的人,甚至你自己。

相关问题