【发布时间】:2010-08-11 23:09:02
【问题描述】:
我在论坛上找了 2 天了,没有找到好的答案,所以我就发布它。
我似乎在将 JSON 发送回控制器进行保存时遇到问题。 JSON 应该映射到模型视图,但它不断获取默认(构造函数)值,而不是来自 POST 的值。
我们有一系列 JS 小部件,其中包含一个带有 json 的数据字段。我们在客户端的这些小部件对象中进行所有数据操作。当用户想要保存时,我们从相关的小部件中获取我们需要的数据,然后将其放入与 ViewModel 匹配的另一个 JSON 对象中,然后将其 POST 回服务器。
例如:
$("#Save").click(function () {
if (itemDetails.preparedForSubmit() && itemConnections.preparedForSubmit()) {
itemComposite.data.Details = itemDetails.data;
itemComposite.data.Connections= itemConnections.data;
$.post(MYURL, itemComposite.data);
} else {
alert("failed to save");
}
});
preparedForSubmit() 方法简单地执行任何验证检查或您可能需要在客户端执行的最后一分钟格式化之类的工作。
itemDetails 小部件数据与 ViewModel 匹配。
itemConnections 小部件数据与 ViewModel 集合匹配。
控制器如下所示:
[HttpPost]
virtual public JsonResult SaveItemDetailsComposite(ItemComposite inItemData)
{
if (ModelState.IsValid)
{
try
{
_Mapper.Save(itemComposite.Details , itemComposite.Connections);
return Json(true);
}
catch (Exception ex)
{
_log.Error("Exception " + ex.InnerException.Message);
throw;
}
}
return Json(SiteMasterUtilities.CreateValidationErrorResponse(ModelState));
}
ItemComposite 类是一个简单的视图模型,它包含一个 itemDetails 对象和一个 itemConnections 的集合。当它返回数据到这里时,它只是获取默认数据,就好像它得到了一个新的 ItemComposite 而不是转换 POST 数据。
在 Firebug 中,我看到数据已发布。虽然它看起来很奇怪,但在 firebug 中没有自动格式化。
【问题讨论】:
标签: asp.net-mvc-2 viewmodel model-view-controller