我有一種情況,即通過jQuery $ .ajax將數據發送到控制器,數據是序列化的json字符串。 (MVC 3.0)
它將它很好地綁定 - 我的控制器收到結果並且它們是正確的。現在,我在回發驗證時遇到問題。我懷疑這是因爲並非所有的對象都必然會形成控件本身。
問題是我必須使用javascript將數據添加到我的模型中,因爲模型需要集合中的項目。使用javascript,jquery和模板,我選擇了這個項目,並在將模型發送給Controller之前將其添加到模型中。但是,在回發中,這些數據不存在(這是預期的,因爲它必須將它反序列化到javascript數組中 - 這不是我的問題)。
我的問題是,它執行驗證的雙重回發,或根本沒有。如果我使用
e.preventDefault();
來停止正常表單發佈,我永遠不會驗證。但如果我不使用它,那我總是得到一個雙重職位,這在我看來永遠不會重定向。
我的jQuery代碼如下..
$('form').submit(function(e){
var data = $('form').serializeObject();
data.Quality = // this line adds some data from a JSON object.
var json = JSON.stringify(data);
$.ajax({
url: location.href,
type: 'POST',
dataType: 'json',
data: json,
contentType: 'application/json',
success: function (data) {
$("#jsonOutput").html(json);
}
});
e.preventDefault();
});
這裏是serializeObject功能。
$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
這是我的控制器操作。
[HttpPost]
public ActionResult Blueprint(Blueprint blueprint)
{
if (ModelState.IsValid)
{
using (var context = new Mapping.DataContext())
{
context.Blueprints.Add(blueprint);
context.SaveChanges();
return Json(Redirect("/List/Blueprints"));
}
}
return View(blueprint);
}
我會發布更多的代碼,如果要求,但我認爲這是所有相關的。我正在使用庫knockoutjs
進行模板,如果這是相關的。請告訴我你還有什麼需要看看是否適用。