2

Web インターフェイスを使用して、紙ベースのアンケート フォームを記録する手段を再現しようとしている状況があります。

目的に適していると思われるデータベーステーブルのセットがありますが、ユーザーが回答を管理できるようにする編集ビューを作成するための解決策を見つけるのに苦労しています。

まず、テーブル構造は次のようになります。 質問と回答を保存するためのデータベース構造

データベースの残りの部分は、当面の問題とはあまり関係がないため省略しました。

基本的に、フォームタイプを持つさまざまな評価があります。フォーム タイプには、一連の質問が関連付けられています。質問には、さまざまなデータが関連付けられています。つまり、予想される回答の形式で、テキスト、値、単一または複数の選択肢があります。最後に、各質問への回答を記録する表があります。質問が複数選択の場合、ここに複数のエントリが含まれる場合があります。

レンダリング時に一連の回答を作成し、適切なエディターを表示する必要があることに気付く段階に達しました。形式を考慮に入れるためにエディターが必要であり、複数選択または単一選択の場合は、ドロップダウンまたはチェックボックスの配列が表示されます。

これが私の知性が私を失望させるところです!

進行中のコードは次のようになります。

まず、ビューモデルの質問と回答のすべての詳細を格納する単純なクラスがあります。

public class InitialAssessmentAnswerDTO
{
    public int QuestionID { get; set; }
    public string Question { get; set; }
    public string Format { get; set; }
    public IEnumerable<QuestionPossibleAnswer> PossibleAnswers { get; set; }

    //different answer types
    public bool AnswerYesNo { get; set; }
    public int? AnswerID { get; set; }
    public string AnswerText { get; set; }
    public int? AnswerValue { get; set; }
    public string QuestionSection { get; set; }

    public InitialAssessmentAnswerDTO(IEnumerable<QuestionPossibleAnswer> answers)
    {
        PossibleAnswers = answers;
    }

    public InitialAssessmentAnswerDTO()
    {

    }
}

次に、フォームの既存の回答を作成または取得する repo メソッドがあります。

...

var form = Context.Forms.FirstOrDefault(p => p.FormName == "Initial Assessment");
        var initialAnswers = new List<InitialAssessmentAnswerDTO>();

        if (form != null)
        {
            var questions = form.QuestionsForForms;

            foreach (var question in questions)
            {
                var a = new InitialAssessmentAnswerDTO();
                a.QuestionID = question.QuestionID;
                a.Question = question.Question.QuestionText;
                a.QuestionSection = question.Question.Section;
                a.Format = question.Question.QuestionAnswerFormat.Format;
                a.PossibleAnswers = question.Question.QuestionPossibleAnswers;

                var answer = ia.InitialAssessmentAnswers.FirstOrDefault(p => p.QuestionID == question.QuestionID);
                if (answer == null)
                {
                    //set some default values here
                }
                else
                {
                    a.AnswerID = answer.id;
                    a.AnswerValue = answer.AnswerValue;
                }
            }
        }

したがって、理論的には、すべての質問に対する答えを保持する Viewmodel になるはずです。私の問題は、次の最善の方法がわからないことです。

  • A - オブジェクトのリストを扱いやすい方法でレンダリングする
  • B - ドロップダウンまたはチェックボックスの配列を表示する

これで間違った方向に進んでいますか?もっと簡単な方法はありますか?解決策を考えすぎていませんか?

お時間をいただきありがとうございます。エッセイのような質問で申し訳ありません。

4

0 に答える 0