2016-12-29 16 views
0

私はMVCアプリケーションを作成しています。ユーザーがドロップダウンリストからデータを選択するビューを作成しました。MVC自動検証

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/bootstrap") 
@using ClassDeclarationsThsesis.Classes 
@using Microsoft.Ajax.Utilities 
@model ClassDeclarationsThsesis.Models.ClassesViewModel 
@{ ViewBag.Title = "Classes"; 
} 


<h2>Classes</h2> 

@foreach (var user in Model.users) 
{ 
    if (user.email.Replace(" ", String.Empty) == HttpContext.Current.User.Identity.Name) 
    { 
     if (user.user_type.Replace(" ", String.Empty) == 3.ToString() || user.user_type.Replace(" ", String.Empty) == 2.ToString()) 
     { 
      using (Html.BeginForm("Classes", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
      { 
       @Html.AntiForgeryToken() 
       <h4>Generate summary views</h4> 
       <hr /> 
       @Html.ValidationSummary("", new { @class = "text-danger" }) 
       <div class="form-group"> 
        @{ 
         List<SelectListItem> listItems1 = new List<SelectListItem>(); 
        } 
        @foreach (var subject in Model.subject) 
        { 
         listItems1.Add(new SelectListItem 
         { 
          Text = subject.name, 
          Value = subject.name, 
         }); 
        } 
        @Html.LabelFor(m => m.subject_name, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.DropDownListFor(m => m.subject_name, listItems1, new { @class = "form-control" }) 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" class="btn btn-default" value="Submit" /> 
        </div> 
       </div> 

          } 
         } 
         if (user.user_type.Replace(" ", String.Empty) == 1.ToString()) 
         { 
          <p>You do not have enough permissions to enter this page. Contact the administrator.</p> 
           } 

          } 
         } 

コントローラは次のとおりです:

public ActionResult Classes() 
{ 
    ClassDeclarationsDBEntities1 entities = new ClassDeclarationsDBEntities1(); 
    var model = new ClassesViewModel(); 
    model.subject = entities.Subjects.ToList(); 
    model.users = entities.Users.ToList(); 
    if (ModelState.IsValid) 
    { 
     return RedirectToAction("ClassesPickGroup", "Account", new { subject_name=model.subject_name}); 
    } 
    return View(model); 
} 

とモデル:

public class ClassesViewModel 
    { 
     public List<Subject> subject { set; get; } 
     public List<User> users { get; set; } 
     [Required] 
     [Display(Name = "Subject")] 
     public string subject_name { get; set; } 

    } 

しかし、ビューは、単一のドロップダウンリストが含まれているので、それは常に有効であるビューは、このようなものですすぐに別のビューにリダイレクトされます。アプリケーションをドロップダウンリストでユーザーの選択を待ってから、回答を送信するにはどうすればよいですか?

+0

のために提出し、確認し、新しいオブジェクトを作成する問題はドロップダウンセレクターでフォームを持っています。ユーザーがsubmitをクリックしてからアクションを実行するまで、フォームは送信されません。 「アプリケーションがユーザーの選択を待つようにする」ことは意味をなさない。フォームを自動的に送信するトリガーがありますか? – Jasen

+0

@ジャセンこのようなトリガはありません。そして問題は、ビューが表示されず、ClassesPickGroupビューにまっすぐに移動することです。 –

+1

@MaciejMiśkiewicz答えをチェックして、あなたのフィードバックを待って、 –

答えて

1

はあなたのビューには問題ありませんが、あなたがするたびにユーザーが検証

public ActionResult Classes(ClassesViewModel model) 
{ 
    ClassDeclarationsDBEntities1 entities = new ClassDeclarationsDBEntities1(); 
    if (ModelState.IsValid) 
    { 
     return RedirectToAction("ClassesPickGroup", "Account", new { subject_name=model.subject_name}); 
    } 
    else { 
     model.subject = entities.Subjects.ToList(); 
     model.users = entities.Users.ToList(); 
     return View(model); 
    } 
}