2013-02-22 2 views
0

Я использую MVC 3 (RAZOR) для своего веб-приложения.MVC 3 HiddenField not render base 64 data

У меня есть простой вид «редактирования», который касается записи сотрудника (например, имя, фамилия, ДОБ и т. Д.), Но некоторые данные чувствительны и зашифрованы. Чувствительные данные зашифровываются и преобразуются в базовую строку. Чувствительные данные не редактируются в представлении редактирования, но передаются в скрытое поле, чтобы «сохранить его», чтобы он не потерялся в обратной передаче, если необходимо изменить другие поля в записи сотрудника.

Я думаю, что, поскольку эти данные являются базовыми 64, они не будут отображаться в скрытом поле - возможно, это вещь безопасности MVC 3. Я также должен отметить, что это свойство отмечено как обязательное для моей модели. Поэтому он должен быть повторно заполнен, чтобы отправить сообщение обратно.

Есть ли специальный атрибут, который мне нужно включить в это свойство, чтобы сообщить MVC, что его можно использовать в скрытом поле? Любые другие идеи?

В RAZOR, мое скрытое объявление поля выглядит следующим образом:

@Html.HiddenFor(model => model.SomeBase64String) 

В HTML, он визуализируется как таковые:

<input style="margin-right: 5px;" id="SomeBase64String" name="SomeBase64String" value="" type="hidden" data-val="true" data-val-required="SomeBase64String is required."> 

Пример строки база 64 может быть:

OW0iSdFXUqaUT82qjqaG5w== 

Внутри контроллера контроллера (GET) у меня есть следующее:

 public ActionResult Edit(int id) 
     { 
      Employee employee; 

      if (id == 0) 
      { 
       employee = Employee.CreateNew(); 
      } 
      else 
      { 
       employee = _employeeDatabaseAccess.GetEmployeeById(id); 

       //employee.SomeBase64String is already set. it's stored in the db... 
      } 

      return View(employee); 
     } 

ответ

1

Убедитесь, что вы установили соответствующее свойство на вашей модели представления внутри действия контроллера перед отрисовкой мнение:

model.SomeBase64String = ... 
return View(model); 

Но я бы не возиться с любыми кодировками. Правильный способ справиться с этим - не передавать эту информацию вообще, если пользователь не должен ее редактировать. И затем в вашем действии контроллера POST просто используйте идентификатор записи, чтобы прочитать эту информацию из того места, где вы ее сначала читали (я думаю, вы используете какой-то хранилище данных или что-то в этом роде).

Вам следует передать только информацию, которую пользователь должен просматривать и редактировать. Передача конфиденциальной информации - это просить неприятностей.

+0

Это. model.SomeBase64String устанавливается правильно, прежде чем он будет передан в представление. –

+0

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

+0

Если задано 'model.SomeBase64String', это должно сработать. Убедитесь, что это свойство имеет строку типа. Нет никакой причины, чтобы хелпер 'Html.HiddenFor' отображал простые строки, но пропускал более сложные строки. –

0

Ну, я создал образец проекта MVC, когда Дарин предложил и проверил, что строка Base 64 может быть отображена в скрытом поле. Нет проблем. В моем приложении должна быть проблема.