2012-05-23 1 views
0

У меня возникла небольшая проблема, с которой мне бы очень хотелось помочь.Динамически заданный текст и значение TextBoxFor

У меня есть объект User с идентификаторами свойств и NAME, которые мне нужно отображать в текстовом поле Readonly. Я хотел бы заполнить значение texbox значением ID и Text с именем.

Когда представлен FormCollection мне нужно получить введенные данные с:

collection.Get("User") 

Я знаю, что это не правильный синтаксис, но я пытаюсь добиться следующего:

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

Что делать Мне нужно сделать, чтобы исправить это? В текстовом поле, как я могу отобразить имя пользователя, при отправке возвратить идентификатор пользователя с помощью collection.Get («Пользователь»)?

Заранее спасибо.

p.s. Стандартный

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

не работает для меня, как это не сохраняет значение и

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

не может по понятным причинам, когда User.Id пуст (в моем случае это возможно).

ответ

2

Вам необходимо сохранить идентификатор в скрытом поле ввода.

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

Имейте в виду, что до тех пор, пока вы используете readonly, значение будет привязано к модели. Но как только поле отключено, оно не будет. Таким образом, вы получите нулевые значения в своем контроллере.

В контроллере вы можете использовать Modelbinding вместо доступа к FormCollection.

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

Update:

Почему вы wan't иметь эти значения в представлении в первую очередь?

Если вам нужны они для привязки к моделям, вы должны знать, что люди все еще могут манипулировать ими, даже если они являются readonly (Firebug, POST-запросы из других скриптов).

Если вы требуете, чтобы ваша модель была действительной, я бы рекомендовал использовать скрытые поля ввода. И на стороне сервера убедитесь, что вы сохраняете только те значения, которые пользователь должен изменить.

+0

Yup, спасибо. Я знаю об этом. Поскольку мы в теме ... Знаете ли вы, есть ли элемент управления Display/Label, который получает привязку к модели при отправке? Как описано в OP, я показываю имя пользователя в текстовом поле readonly. Я действительно хочу, чтобы это был ярлык, но метки, похоже, не подчинены Formcollection. Или использовать ярлыки с более скрытыми полями для передачи данных? – Shenaniganz

+0

См. Мой обновленный ответ. Afaik нет элемента управления Display/Label, который будет привязан к модели. – mfussenegger

+0

Спасибо. Не так сексуально решение, на которое я надеялся, но он работает! – Shenaniganz