2013-01-24 133 views
1

我使用Asp.net MVC4(C#),我想从控制器加载数据以查看。 从控制器返回视图中的对象,该对象具有时间跨度类型的属性(HH:DD:MM) 这是我的功能:json TimeSpan返回对象

public JsonResult Buscar(string id){ 
     string Mensaje = ""; 
     Models.cSinDenuncias oDenuncia = new Models.cSinDenuncias(); 
     oDenuncia.sd_iddenuncia = id; 
     var denuncia = Servicio.RecuperaDenuncia<Models.cSinDenuncias>(ref Mensaje, oDenuncia.getPk(), oDenuncia); 
     return Json(denuncia); 
    } 

denuncia.sd_horadenuncia具有例如此值18时03分53秒但是,当显示在视图中,这是值[对象的对象] 在视图(Html.TextBoxFor)我无法加载此值:

$('#HoraDen').val(data.sd_horadenuncia); 

如何恢复正确的值? (HH:MM:SS),而不是[对象的对象]

问候 里卡多

回答

4

一个TimeSpan是一个复杂的类型。这意味着,在您的JSON是序列化为例如:

{ 
    "sd_horadenuncia": { 
     "Ticks": 3000000000, 
     "Days": 0, 
     "Hours": 0, 
     "Milliseconds": 0, 
     "Minutes": 5, 
     "Seconds": 0, 
     "TotalDays": 0.003472222222222222, 
     "TotalHours": 0.08333333333333333, 
     "TotalMilliseconds": 300000, 
     "TotalMinutes": 5, 
     "TotalSeconds": 300 
    } 
} 

您正在尝试这种复杂的对象分配到文本字段,这显然是没有意义的。

你可以使用一个视图模型上的控制器动作来预格式化值:

public ActionResult Buscar(string id) 
{ 
    string Mensaje = ""; 
    Models.cSinDenuncias oDenuncia = new Models.cSinDenuncias(); 
    oDenuncia.sd_iddenuncia = id; 
    var denuncia = Servicio.RecuperaDenuncia<Models.cSinDenuncias>(ref Mensaje, oDenuncia.getPk(), oDenuncia); 
    return Json(new 
    { 
     formattedHoradenuncia = denuncia.sd_horadenuncia.ToString() 
    }); 
} 

,然后你的视图中,你可以使用新的属性:

$('#HoraDen').val(data.formattedHoradenuncia); 

另一种可能性是访问此复杂对象的单独属性并自行设置值:

var hours = data.sd_horadenuncia.Hours; 
var minutes = data.sd_horadenuncia.Minutes; 
var seconds = data.sd_horadenuncia.Seconds; 
$('#HoraDen').val(hours + ':' + minutes + ':' + seconds);