Pracuję nad aplikacją MVC3. Moja strona ViewModel po stronie klienta zawiera właściwość RowVersion programu SQL Server, która jest bajtem []. Jest on renderowany jako tablica obiektów po stronie klienta. Kiedy próbuję opublikować mój model widoku do kontrolera, właściwość RowVersion ma zawsze wartość NULL.MVC3 - umieszczanie tablicy bajtów w kontrolerze - Database RowVersion
Zakładam, że Serializator kontrolera (JsonValueProviderFactory) ignoruje właściwość array obiektu.
Widziałem ten blog, jednak ten nie ma zastosowania, ponieważ jestem delegowania JSON, a nie znaczników forma: http://thedatafarm.com/blog/data-access/round-tripping-a-timestamp-field-with-ef4-1-code-first-and-mvc-3/
Moim zdaniem czyni moje ViewModel tak:
<script type="text/javascript">
var viewModel = @Html.Raw(Json.Encode(this.Model));
</script>
I wtedy zakładać ViewModel do sterownika tak:
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);
}
});
Oto moje działanie w kontrolerze:
[HttpPost]
public JsonResult Save(Contact contact) {
return this.Json(this._contactService.Save(contact));
}
AKTUALIZACJA: na podstawie odpowiedzi Darina.
Miałem nadzieję na czystsze rozwiązanie, ale ponieważ Darin dostarczył jedyną odpowiedź, będę musiał dodać niestandardową właściwość, która będzie szeregować moją bajtową właściwość [] "row_version" do łańcucha Base64. A gdy ciąg Base64 jest ustawiony na nową właściwość niestandardową, konwertuje ciąg z powrotem na bajt []. Poniżej znajduje się nieruchomość zwyczaj „RowVersion”, które dodałem do mojego modelu
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);
}
}
Hej, można pisać kod działania kontrolera? – Tocco
Hej @Darin Dimitrov, czy możesz dodać znacznik 'serializacja'? – Tocco
@Tocco, dodałem go. –