2

我正在开发 ASP.NET MVC 4 beta 中的单页应用程序,在结果尝试映射我的控制器返回的 JSON 时失败(我猜)。

我的项目需要一些个人信息,一些开放式问题+答案和一些李克特问题+答案(同意,不同意等)

这是我的模型的外观:

// Essay contains personal information, questions and related answers 
public class EssayResult {
    public EssayResult() {
        if( FinishedAt == null )
            FinishedAt = DateTime.Now;

        PersonInfo = new PersonInfo();
        LikertAnswers = new List<LikertAnswer>();
        OpenAnswers = new List<OpenAnswer>();
    }

    public int EssayResultId {get; set;}
    public DateTime? FinishedAt {get; set; }
    public virtual int PersonInfoId {get; set; }
    public virtual PersonInfo PersonInfo {get; set; }
    public virtual ICollection<LikertAnswer> LikertAnswers {get; set; }
    public virtual ICollection<OpenAnswer> OpenAnswers {get; set; }
}

// Contains some information about the person who's doing the essay
public class PersonInfo {
    public int PersonInfoId {get; set;}
    [Required]
    public int Age {get; set; }
    [Required]
    public Education Education {
        get { return ( Education ) EducationValue; }
        set { EducationValue = ( int ) value; }
    }
    [Required]
    public Gender Gender {
        get { return ( Gender ) GenderValue; }
        set { GenderValue = ( int ) value; }
    }
    [Required]
    public bool RobotExperience {get; set; }

    // Workaround to get enums mapped 
    public int EducationValue {get; set; }
    public int GenderValue {get; set; }
}

public enum Education {
    Middelbaar,
    Mbo,
    Hbo,
    Wo
}

public enum Gender {
    Man,
    Vrouw
}

public class LikertQuestion {
    public int LikertQuestionId {get; set; }
    [Required]
    public string Name {get; set; }
    [Required]
    public string Question {get; set; }
}


public class LikertAnswer {
    // Primary key and Question-relation
    public int LikertAnswerId {get; set; }

    public virtual int LikertQuestionId {get; set; }
    public virtual LikertQuestion LikertQuestion {get; set; }
    public virtual int EssayResultId {get; set; }
    public virtual EssayResult EssayResult {get; set; }

    // Properties
    public LikertScale Answer {get; set;}
}

public class OpenQuestion {
    public int OpenQuestionId {get; set; }
    public string Question {get; set; }
}

我的控制器似乎返回了正确的 JSON:

{
    "EssayResultId": 0, 
    "FinishedAt": "/Date(1338204633030+0200)/", 
    "LikertQuestionId": 0,
    "LikertAnswers": [
    {
        "Answer": 0, 
        "EssayResult": null, 
        "EssayResultId": 0, 
        "LikertAnswerId": 0, 
        "LikertQuestion": {
            "LikertQuestionId": 1, 
            "Name": "PU01", 
            "Question": "Ik denk dat robots nuttig zijn"
        }
    }, 
    ...
    ], 

    "OpenAnswers": [
    {
        "Answer": null, 
        "EssayResult": null, 
        "EssayResultId": 0, 
        "OpenAnswerId": 0, 
        "OpenQuestion": {
            "OpenQuestionId": 1, 
            "Question": "Wat komt er als eerste in u op bij het horen van het woord 'robot'?"
        }, 
        "OpenQuestionId": 0
    }, 
    ...  ], 

    "PersonInfo": {
        "Age": 12, 
        "Education": 0, 
        "EducationValue": 0, 
        "Gender": 0, 
        "GenderValue": 0, 
        "PersonInfoId": 0, 
        "RobotExperience": false
    }, 
    "PersonInfoId": 0
}

某些引用未设置,因为这些对象是由控制器创建的,而不是从数据库中提取的。

Knockout 无法将其映射到有效的视图模型中,它不会提示任何错误,但是当我使用 firebug 检查视图模型变量时,它会显示大量的结果函数等,而不是视图模型和一些额外的结果函数。

这是我的第一个 Knockout、Upshot 和 SPA 项目,所以我有点迷失了,因为结果不会引发任何错误,而且模型在服务器端/数据库级别是正确的......

如果我需要提供更多详细信息,请告诉我。:) 我已经按照 ToDo-items 教程和 Steve Sanderson 的 Delivery Tracker 示例进行操作,所以我想它必须与我的模型/映射有关..?

桑德

更新:我已经删除了 FinishedAt 属性,因为它显然格式错误,但即使这样也没有帮助..仍然不知道为什么我的视图模型不会渲染,json 似乎很好..

4

1 回答 1

0

目前,Upshot 和服务器端不是 ASP.NET MVC 4 RTM 的一部分。所以我会稍等片刻——等待未来的决定。

于 2012-09-11T07:06:47.107 回答