私はMVC3アプリケーションで作業しています。私のクライアント側のViewModelには、SQL ServerのRowVersionプロパティが含まれています。これは、byte []です。これは、クライアント側でObject配列としてレンダリングされます。私のビューモデルをコントローラに投稿しようとすると、RowVersionプロパティは常にnullになります。MVC3 - バイト配列をコントローラにポストする - データベースRowVersion
Iは、コントローラシリアライザは(JsonValueProviderFactory)オブジェクトの配列プロパティを無視していると仮定しています。
私は、フォームのマークアップをJSONを掲載しておりませんように私は、しかし、これは適用されません、このブログを見てきました: http://thedatafarm.com/blog/data-access/round-tripping-a-timestamp-field-with-ef4-1-code-first-and-mvc-3/
私の見解はそうのように私のviewmodelをレンダリング:
<script type="text/javascript">
var viewModel = @Html.Raw(Json.Encode(this.Model));
</script>
私はその後、そのようなコントローラへのViewModelを投稿する:ここで
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);
}
});
は、コントローラの私の行動です:
[HttpPost]
public JsonResult Save(Contact contact) {
return this.Json(this._contactService.Save(contact));
}
更新:ダリンの答えに基づく。
私はより洗練されたソリューションを望んでいましたが、Darinが唯一の答えを提供して以来、私はbyte [] "row_version"プロパティをBase64文字列にシリアル化するカスタムプロパティを追加する必要があります。 Base64文字列が新しいカスタムプロパティに設定されると、文字列はbyte []に変換されます。以下は、私がモデルに追加されたカスタム「RowVersion」プロパティです:
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);
}
}
ねえ、あなたはあなたのコントローラのアクションコードを投稿することができますか? – Tocco
ちょっと@Darin Dimitrov、 'serialization'タグを追加できますか? – Tocco
@Tocco、私はそれを追加しました。 –