2016-12-29 68 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

的问题,您有一个下拉选择一种形式。直到用户单击提交后才会提交表单,然后执行该操作。 “让应用程序等待用户选择”没有意义。你有触发器来自动提交表单吗? – 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); 
    } 
}