0

我遇到了一些问题,希望能得到一些帮助。

我有一个带有属性 ID 和 NAME 的用户对象,需要在只读文本框中显示。我想用 ID 填充 texbox 的值,用名称填充文本。

提交给 Formcollection 时,我需要使用以下命令检索输入的数据:

collection.Get("User")

我知道这不是正确的语法,但我正在尝试实现以下目标:

@Html.TextBoxFor(model => model.User, new { @readonly="readonly",@Value = model.Id , @Text=model.Name })

我需要做什么来纠正这个问题?在文本框中如何显示用户名,提交时返回用户 ID 和 collection.Get("User") ?

先感谢您。

ps 标准

 @Html.TextBoxFor(model => model.User.Name)

对我不起作用,因为它不存储价值和

@Html.TextBoxFor(model => model.User, new { @readonly="readonly",@Value = Model.User.Id})

当 User.Id 为空时(在我的情况下是可能的),由于明显的原因而失败。

4

1 回答 1

2

您需要将 Id 存储在隐藏的输入字段中。

@Html.HiddenFor(x => x.User.Id)
@Html.TextBoxFor(x => x.User.Name, new { @readonly = "readonly" })

请记住,只要您使用只读,该值将是模型绑定的。但是一旦该字段被禁用,它就不会。因此,您将在 Controller 中收到空值。

在控制器中,您可以使用模型绑定而不是访问 FormCollection。

public ActionResult Whatever(User user)
{
    // user.Id
    // user.Name 
    // should be filled.
}

更新:

为什么你一开始就不想在视图中包含这些值?

如果您需要它们进行模型绑定,您应该知道即使它们是只读的(Firebug,来自其他脚本的 POST 请求),人们仍然可以操作它们。

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

于 2012-05-23T18:08:32.990 回答