MVC3 - postagem de matriz de bytes em um controlador - Database RowVersion
Estou trabalhando em um aplicativo MVC3. O ViewModel do meu cliente contém uma propriedade RowVersion do SQL Server, que é um byte []. É renderizado como uma matriz de objetos no lado do cliente. Quando tento postar meu modelo de exibição em um controlador, a propriedade RowVersion é sempre nul
Estou assumindo que o serializador do controlador (JsonValueProviderFactory) está ignorando a propriedade da matriz do objet
Vi este blog, mas isso não se aplica, pois estou postando JSON e não a marcação do formulário:http: //thedatafarm.com/blog/data-access/round-tripping-a-timestamp-field-with-ef4-1-code-first-and-mvc-3
My view renderiza meu viewmodel assim:
<script type="text/javascript">
var viewModel = @Html.Raw( Json.Encode( this.Model ) );
</script>
Em seguida, publico o viewModel no controlador da seguinte maneira:
var data = {
'contact': viewModel
};
$.ajax({
type: 'POST',
url: '/Contact/Save',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
dataType: 'json',
success: function (data) {
// Success
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});
Aqui está minha ação no controlador:
[HttpPost]
public JsonResult Save(Contact contact) {
return this.Json( this._contactService.Save( contact ) );
}
ATUALIZAR com base na resposta de Dari
Eu estava esperando uma solução mais limpa, mas, como Darin forneceu a única resposta, terei que adicionar uma propriedade personalizada que serialize minha propriedade byte [] "row_version" em uma string Base64. E quando a string Base64 é definida como a nova propriedade customizada, ela converte a string novamente em um byte []. Abaixo está a propriedade "RowVersion" personalizada que adicionei ao meu modelo:
public byte[] row_version {
get;
set;
}
public string RowVersion {
get {
if( this.row_version != null )
return Convert.ToBase64String( this.row_version );
return string.Empty;
}
set {
if( string.IsNullOrEmpty( value ) )
this.row_version = null;
else
this.row_version = Convert.FromBase64String( value );
}
}