2016-12-29 76 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); 
    } 
}