1

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

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 但是当我在视图中显示时我无法加载这个值这是视图中的值 [OBJECT OBJECT] (Html.TextBoxFor):

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

我怎样才能恢复正确的值?(HH:MM:SS) 而不是 [OBJECT OBJECT]

问候里卡多

4

1 回答 1

5

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);
于 2013-01-25T13:50:27.133 回答