动态设置TextBoxFor的Text和Value

时间:2012-05-23 18:00:55

标签: c# asp.net-mvc razor html.textboxfor

我有一些问题,我很感激你的帮助。

我有一个具有属性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为空时

因为显而易见的原因而失败(在我的情况下可能是这样)。

1 个答案:

答案 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请求)。

如果您要求模型有效,我建议您使用隐藏的输入字段。并且在服务器端确保您只保存用户实际应该更改的值。