2

私はASP.NETMVC4ベータ版のシングルページアプリケーションに取り組んでいますが、これは、アップショットがコントローラーから返された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
}

一部の参照は、これらのオブジェクトがDBから取り出されるのではなく、コントローラーによって作成されたために設定されていません。

Knockoutはこれを有効なビューモデルにマップできず、エラーは表示されませんが、firebugでviewmodel変数を調べると、ビューモデルと追加のアップショット関数のハンドフルではなく、多くのアップショット関数などが表示されます。

これは私の最初のノックアウト、アップショット、SPAプロジェクトなので、アップショットはエラーをスローせず、モデルはサーバーサイド/デシベルレベルで正しいので、ちょっと迷っています...

さらに詳細を提供する必要がある場合は、お知らせください。:)ToDo-itemsチュートリアルとSteveSandersonのDeliveryTrackerの例に従ったので、モデル/マッピングに何かが必要だと思います。

サンダー

更新:明らかに間違った形式であるため、FinishedAtプロパティを削除しましたが、それでも役に立ちませんでした。それでも、ビューモデルがレンダリングされない理由がわかりません。jsonは問題ないようです。

4

1 に答える 1

0

Upshotとサーバー側は、現時点ではASP.NET MVC4RTMの一部ではありません。だから私は少し待つだろう-将来が決定されるのを待つ。

于 2012-09-11T07:06:47.107 に答える