2015-02-16 4 views
0

Я работаю на 5 (5.2.2) приложение ASP.NET MVC, в котором я получил модель:Set Не недвижимости Рабочая

public class MyModel{ 
    private String _Password; 
    [Required] 
    [StringLength(int.MaxValue, MinimumLength=6)] 
    [DataType(DataType.Password)] 
    public string Password { 
     get 
     { 
      return Shell.ToolBox.Cryptography.GetMD5(_Password); 
     } 
     set { 
      _Password = value; // This is not called 
     } 
    } 
} 

Значение _Password всегда пустой, и когда я изменить это свойство на проблему автоматического типа. Что не так, я использовал точку разрыва, метод набора даже не достигнут.

Вид:

<br /> 
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label" }) 
@Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" }) 
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } }) 
+0

Где код, который обычно называют сеттер? –

+0

@AustinMullins: проверьте обновление, пожалуйста, – James

+1

Идея: «Shell.ToolBox.Cryptography.GetMD5' обрабатывает нулевой ввод? Попробуйте проверить значение null и передать пробел. – Blorgbeard

ответ

1

@Blorgbeard показал решение. Смотрите следующую модель:

public class Dummy 
{ 
    private string _field; 

    [Required] 
    [StringLength(int.MaxValue, MinimumLength=6)] 
    [DataType(DataType.Password)] 
    public string Field 
    { 
     get 
     { 
      if (_field == null) 
      { 
       throw new ArgumentNullException("Argh!"); 
      } 

      return Utils.ByteArrayConverter.ByteArrayToString(
       MD5CryptoServiceProvider.Create(_field).Hash); 
     } 
     set 
     { 
      _field = value; 
     } 
    } 
} 

я добавил чек на null (который генерирует исключение) для имитации того, что произойдет, если хэш-функция MD5 не может обрабатывать нулевое значение аргумента. Разумеется, страница действует так, как будто Field всегда имеет значение null, а окно отладки регистрирует ArgumentNullException. В вашем случае, мы все еще можем использовать версию Shell.Toolbox, но нам просто нужно проверить нуль первым:

var pwd = _Password; 
if (pwd == null) 
{ 
    pwd = string.Empty; 
} 

return Shell.ToolBox.Cryptography.GetMD5(pwd); 
+0

Проблема не в том, что SET не достигнут после публикации данных! и _Password ВСЕГДА имеет значение null, независимо от того, что происходит, потому что оно никогда не устанавливается. Обработка нулевого значения не решит какую-либо его часть, потому что она продолжает бросать это исключение. – James

+0

Я признаю, что я не эксперт по ASP, но я повторил вашу проблему в новом проекте, и, похоже, он исчез, когда я заменил код, который сделал исключение. Возможно, другой пользователь предложит лучшее объяснение/решение. –

Смежные вопросы