我有一些问题,我很感激你的帮助。
我有一个具有属性ID和NAME的User对象,我需要在Readonly文本框中显示。我想用ID和Text with Name填充texbox的值。
提交给Formcollection时,我需要检索输入的数据:
collection.Get("User")
我知道这不是正确的语法,但我正在努力实现以下目标:
@Html.TextBoxFor(model => model.User, new { @readonly="readonly",@Value = model.Id , @Text=model.Name })
我需要做些什么来纠正这个问题?在文本框中如何显示用户名,提交时返回带有collection.Get(“User”)的用户ID?
提前谢谢。
P.S。 标准
@Html.TextBoxFor(model => model.User.Name)
对我不起作用,因为它不存储值和
@Html.TextBoxFor(model => model.User, new { @readonly="readonly",@Value = Model.User.Id})
当User.Id为空时因为显而易见的原因而失败(在我的情况下可能是这样)。
答案 0 :(得分:2)
您需要将Id存储在隐藏的输入字段中。
@Html.HiddenFor(x => x.User.Id)
@Html.TextBoxFor(x => x.User.Name, new { @readonly = "readonly" })
请记住,只要您使用readonly,该值就会被模型绑定。但是一旦禁用该字段,它就不会。因此,您将在Controller中收到空值。
在Controller中,您可以使用Modelbinding而不是访问FormCollection。
public ActionResult Whatever(User user)
{
// user.Id
// user.Name
// should be filled.
}
<强>更新强>
为什么你不想在视图中首先拥有这些值?
如果你需要它们进行模型绑定,你应该知道人们仍然可以操作它们,即使它们是只读的(Firebug,来自其他脚本的POST请求)。
如果您要求模型有效,我建议您使用隐藏的输入字段。并且在服务器端确保您只保存用户实际应该更改的值。