我有一個用戶界面,看起來像這樣:JSON和ASP.NET MVC模型綁定
我想新創建的行的數據到服務器,使服務器可以保存它。
我以JSON格式從客戶端向我的MVC應用程序發送數據。這裏是我的Ajax請求:
var values = []; // an array with each item being an object/associative array
// more code to get values into variables
for (var i = 0; i < cultures.length; i++) {
var cultureName = cultures[i];
var valueTextBox = $(row).find(...);
var value = $(valueTextBox).val();
var cultureNameAndValue = { 'CultureShortName' : cultureName, 'StringValue' : value };
values.push(cultureNameAndValue);
}
var stringTableRow =
{
'ResourceKeyId': resourceKeyId,
'Key': resourceKeyName,
'CategoryId': categoryId,
'CategoryName': categoryName,
'StringValues': values
};
var stringified = JSON.stringify({ StringTableRow: stringTableRow });
$.ajax('/Strings/JsonCreateNew',
{
cache: false,
async: false,
type: 'POST',
contentType: 'application/json; charset=UTF-8',
data: stringified,
dataType: 'json',
error: SaveNewResourceClientSideHandler.OnError,
success: SaveNewResourceClientSideHandler.OnSuccess
});
這裏的發送(如在Firebug看到的)數據:
{"StringTableRow":{"ResourceKeyId":"","Key":"Foo",
"CategoryId":"1","CategoryName":"JavaScript",
"StringValues":[
{"CultureShortName":"en-US","StringValue":"Something"},
{"CultureShortName":"fr-FR","StringValue":""}]
}}
這裏是我的服務器端代碼:
public ActionResult JsonCreateNew(StringTableRow row)
{
// CreateNewStringTableRow(row);
// return a success code, new resource key id, new category id
// return Json(
new { Success = true, ResourceKeyId = row.ResourceKeyId,
CategoryId = row.CategoryId },
JsonRequestBehavior.AllowGet);
return new EmptyResult();
}
而這裏的業務對象我希望我的傳入POST'ed數據被綁定到:
public class StringTableRow
{
public StringTableRow()
{
StringValues = new List<CultureNameAndStringValue>();
}
public long ResourceKeyId { get; set; }
public string Key { get; set; }
public long CategoryId { get; set; }
public string CategoryName { get; set; }
public IList<CultureNameAndStringValue> StringValues { get; set; }
}
public class CultureNameAndStringValue
{
public string CultureShortName { get; set; }
public string StringValue { get; set; }
}
的Global.asax
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}
}
問題:
動作JsonCreateNew
接收的對象不爲空,但是具有未初始化的所有屬性,即所有空的屬性都爲空和value屬性處於它們的缺省值。因此,即使客戶端發送完全有效的Json字符串,我也無法獲得任何數據。
我需要做自定義模型綁定嗎?
我也是在一個類似的情況下,當我發佈數據到服務器使用ajax請求,然後我必須綁定所有的表單值到json格式,如var name = $(「Name」)。 var age = $(「Age」)。val(); // build json object var squirrel = { 姓名:姓名, 年齡:年齡, }; 是否有任何其他方式,我不必手動將值綁定到json.Means有什麼可以直接將我的viewmodel轉換爲json,然後我可以將它作爲一個對象在控制器中? – Dragon