मैं एक एमवीसी 3 आवेदन पर काम कर रहा हूं। मेरे क्लाइंट साइड व्यूमोडेल में एक SQL सर्वर RowVersion प्रॉपर्टी है, जो बाइट [] है। इसे क्लाइंट साइड पर ऑब्जेक्ट सरणी के रूप में प्रस्तुत किया जाता है। जब मैं अपने व्यू मॉडल को नियंत्रक को पोस्ट करने का प्रयास करता हूं, तो रोवर्सियन प्रॉपर्टी हमेशा शून्य होती है।एमवीसी 3 - एक नियंत्रक को बाइट सरणी पोस्ट करना - डाटाबेस रोवरसन
मुझे लगता है कि नियंत्रक serializer (JsonValueProviderFactory) ऑब्जेक्ट सरणी संपत्ति को अनदेखा कर रहा है।
मैं इस ब्लॉग को देखा है, लेकिन इस पर लागू नहीं होता, जैसा कि मैंने JSON और नहीं प्रपत्र मार्कअप पोस्टिंग कर रहा हूँ:
<script type="text/javascript">
var viewModel = @Html.Raw(Json.Encode(this.Model));
</script>
मेरा विचार तो की तरह मेरे viewmodel renders इसलिए जैसे नियंत्रक से 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));
}
अद्यतन: डारिन के उत्तर के आधार पर।
मैं एक क्लीनर समाधान की उम्मीद कर रहा था, लेकिन चूंकि डारिन ने एकमात्र उत्तर प्रदान किया, इसलिए मुझे एक कस्टम प्रॉपर्टी जोड़नी होगी जो मेरी बाइट [] "row_version" प्रॉपर्टी को बेस 64 स्ट्रिंग में क्रमबद्ध करेगी। और जब बेस 64 स्ट्रिंग को नई कस्टम प्रॉपर्टी पर सेट किया जाता है, तो यह स्ट्रिंग को बाइट [] में बदल देता है।
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
अरे @ डारिन डिमिट्रोव, क्या आप 'क्रमबद्धता' टैग जोड़ सकते हैं? – Tocco
@ टॉको, मैंने इसे जोड़ा है। –