2017-01-16 9 views
-1

私はMVCアプリケーションを作成しています。私はその中にテーブルを持って、フォームを作成しています。テーブルにはユーザーとユーザーの成績が含まれていると想定されます(スクールでのマークシートなど)。マークを変更可能にしたいので、データベースのようにデフォルト値のTextBoxを作成しましたが、「Apply changes」ボタンを押すと、コントローラはすべてのマークのリストをnullとして表示します。それはなぜそうですか?
マイビュー(その一部):null値を返すMVCビュー

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/bootstrap") 
@model ClassDeclarationsThsesis.Models.ClassesViewViewModel 


@{ 
    ViewBag.Title = "ClassesView"; 
} 
<h2>ClassesView</h2> 
<select id="sel"> 
    <option value="week">Current week</option> 
    <option value="total">Total</option> 
</select> 
@{ 
    int i = 0; 
    int inside = 0; 
} 
@using (Html.BeginForm("ClassesView", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
     <div id="week"> 
     <table border="1" width="500"> 
      <tr> 
       <th>Surname</th> 
       <th>Name</th> 
       @foreach (var task in Model.current) 
       { 
        <th>@task.name</th> 
       } 
       <th>Total</th> 
      </tr> 
      @{ 
       int counter = 0; 
       int counter1 = 0; 
      } 
      @foreach (var user in Model.curr_users) 
      { 

       if (user.user_type.Replace(" ", String.Empty) == 1.ToString()) 
       { 

        <tr> 
         <th>@user.surname</th> 
         <th>@user.name</th> 
         @foreach (var task in Model.current) 
         { 
          foreach (var grade in Model.grading) 
          { 
           if (user.user_id == grade.user_id) 
           { 
            if (task.task_id == grade.task_id) 
            { 
             inside = task.value; 
             i = i + task.value; 
             counter1++; 
            } 

           } 

          } 
          <th>@Html.TextBoxFor(m => m.points[counter + counter1 - 1], new { @class = "form-control", @Value = @inside, style = "width:50px;" })</th> 
          inside = 0; 
         } 
         <th> 
          @i 
         </th> 
         @Html.HiddenFor(m => m.class_id) 
         @Html.HiddenFor(m => m.student_id) 
        </tr> 
       } 
       i = 0; 
       counter++; 
      } 
     </table> 
     <input type="submit" class="btn btn-default" value="Apply changes" /> 

    </div> 
       } 

points私はここで使用ClassesViewViewModelList<int>です。私は間違って何をしていますか?
EDIT:
は、コントローラを追加しました:

public ActionResult ClassesView(ClassesViewViewModel value) 
{ 
    ClassDeclarationsDBEntities4 entities = new ClassDeclarationsDBEntities4(); 
    ClassesViewViewModel model = new ClassesViewViewModel(); 
    model.users = entities.Users.ToList(); 
    model.tasks = entities.Tasks.ToList(); 
    model.group_id = value.group_id; 
    model.class_id = value.class_id; 
    model.grading = entities.Gradings.ToList(); 
    model.s_u = entities.Subjects_Users.ToList(); 
    model.t = new List<ClassDeclarationsThsesis.Classes.Task>(); 
    model.current = new List<ClassDeclarationsThsesis.Classes.Task>(); 
    model.curr_users = new List<ClassDeclarationsThsesis.Classes.User>(); 
    DateTime max = DateTime.MinValue; 
    foreach (var task in model.tasks) 
    { 
     if (task.class_id == model.class_id) 
     { 
      model.t.Add(new ClassDeclarationsThsesis.Classes.Task(task.task_id, task.class_id, task.name, task.points, task.deadline)); 
     } 


    } 
    foreach (var task in model.t) 
    { 
     if (DateTime.Compare(task.deadline, max) > 0) 
     { 
      max = task.deadline; 
     } 
    } 
    foreach (var task in model.t) 
    { 
     if (DateTime.Compare(task.deadline, max) == 0) 
     { 
      model.current.Add(task); 
     } 
    } 
    foreach (var s_u in model.s_u) 
    { 
     if (s_u.class_id == model.class_id && s_u.group_id == model.group_id) 
     { 
      foreach (var user in model.users) 
      { 
       if (user.user_id == s_u.user_id) 
       { 
        model.curr_users.Add(new ClassDeclarationsThsesis.Classes.User(user.name, user.surname, user.user_id, user.user_type, user.email, user.password)); 
       } 

      } 
     } 

    } 

    if (ModelState.IsValid) 
    { 
     for(int i=0;i<model.points.Count();i++) 
     { 
      //getting null here 
     } 
    } 
    else 
    { 
     return View(model); 
    } 


    return View(model); 
} 
+0

私たちにあなたのコントローラコードを教えてください。 – Yogi

+0

@Yogi編集をご覧ください。 –

+1

このコードではわかりにくいですが、索引が非順次的であるか、ゼロで始まらないことが考えられます。モデルバインディングを動作させるためには、リストインデックスはゼロで始まり、ギャップなしで連続していなければなりません。 – GSerg

答えて

1

1)あなたはHttpPostアクションメソッドで、 "モデル" として、 "値" を変更する必要があります。

public ActionResult ClassesView(ClassesViewViewModel model) 

2)method.Youは、あなたが挿入、デシベルの読みを置くべきpatterns.Brieflyリポジトリとサービスを学ばなければならないあなたの行動の線の多くは、リポジトリ内の行を更新し、ありますclass.Youは、リポジトリのクラスを作る必要がありますビジネスロジック(検証など)はサービスクラスに含まれている必要があります。

-1

私は答えを見つけました。私はコントローラーのvaluemodelに変更し、0から始まる値が連続していることを確認するためにカウンターを修正しました。ご支援いただきありがとうございます。

+1

なぜあなたは問題とは関係のない答えを受け入れましたか?パラメータ名を変更することは関係ありません(モデルにプロパティ名 'value 'それは表示されていません) –

+0

@StephenMueckeプロパティ名' value'を持っていました。それを変更することは完全な解決策ではありませんでした。 –

+1

あなたの編集中に 'value'という名前のプロパティがあることを示唆しているものは見えません:) –

関連する問題