2016-12-27 44 views
1

當我把我的視圖模型後到我的控制器(沒有選擇的城市),我得到一個預期的「需要城市」的錯誤,但是當我選擇一個城市(第一列表中的發言權)和那麼我有另一個錯誤(例如名字丟失),所以我的模型狀態仍然無效,它將我重定向到初始頁面,並從底部突然選擇一些城市(或隨機時間)Dropdownfor的ModelState後選定的項目的變化是無效

在視圖

@Html.DropDownListFor(m => m.CityID, Model.SelectListCities, "Select City", new { @class = "form-control", @name = "City" }) 

在控制器

public ActionResult Registration() 
    { 
     RegisteredVisitorVM Model = new RegisteredVisitorVM(); 

     List<City> cities = principal.Cities.ToList().OrderBy(x => x.Name).ToList(); 
     List<SelectListItem> cityList = new List<SelectListItem>(); 

     cityList.AddRange(cities.Select(
       x => new SelectListItem { Value = x.CountryID.ToString(), Text = x.Name } 
      ).ToList() 
     ); 

     Model.SelectListCities = cityList; 
     return View("RegistrationView", Model); 
    } 
    public ActionResult SubmitRegisteredVisitors(RegisteredVisitorVM model) 
    { 
     if (!ModelState.IsValid) 
     { 
      List<SelectListItem> cityList = new List<SelectListItem>(); 
      List<City> cities = principal.Cities.ToList().OrderBy(x => x.Name).ToList(); 

      cityList.AddRange(cities.Select(
        x => new SelectListItem { Value = x.CountryID.ToString(), Text = x.Name } 
       ).ToList() 
      ); 

      model.SelectListCities = cityList; 
      return View("RegistrationView", model); 
     } 

     return Content(model.FirstName); 
    } 

在視圖模型

using CondorExtreme3.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace CondorExtreme3.Areas.Users.Models 
{ 
    public class RegisteredVisitorVM 
    { 
    [MaxLength(50, ErrorMessage = "First name is too long!")] 
    [Required(ErrorMessage = "First name is required!")] 
    public string FirstName { get; set; } 

    [MaxLength(50, ErrorMessage = "Last name is too long!")] 
    [Required(ErrorMessage = "Last name is required!")] 
    public string LastName { get; set; } 

    [Index(IsUnique = true)] 
    [MaxLength(30, ErrorMessage = "Username is too long!")] 
    [Required(ErrorMessage = "Username is required!")] 
    public string UserName { get; set; } 

    [MaxLength(30, ErrorMessage = "Password is too long!")] 
    [MinLength(8, ErrorMessage = "Must have at least 8 characters!")] 
    [RegularExpression("^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{2,}$", ErrorMessage = "Must be alpha-numeric!")] 
    [Required(ErrorMessage = "Password is required!")] 
    public string Password { get; set; } 

    [Required(ErrorMessage = "Phone number is required!")] 
    public string PhoneNumber { get; set; } 

    [Index(IsUnique = true)] 
    [Required(ErrorMessage = "Email is required!")] 
    [RegularExpression("^[^@][email protected][^@]+\\.[^@]+$", ErrorMessage = "Invalid format!")] 
    public string Email { get; set; } 

    [Required(ErrorMessage = "City is required!")] 
    public int CityID{ get; set; } 
    public List<SelectListItem> SelectListCities { get; set; } 
} 

}

+0

嘗試添加cityList.Insert(0,新SelectListItem {值= 「」,文本= 「選擇城市」});你(在控制器一旦在視圖一次)設置前SelectListCities歡迎使用屬性上我試過模式 –

+0

但只是導致「選擇的城市」正被顯示兩次 – Ilhan

+1

@Ilhan我可以看到'RegisteredVisitorVM' – CodingYoshi

回答

1

HEJ伊爾汗, 我當我創造了一些大學生工作研討會有這種確切的問題。

第一次我沒有重新填充列表驗證失敗時,和第二時間是inteli感被創造的問題,這是我唯一的重新啓動後VS.解決 簡而言之,如果您使用Code First,您確定var name是「CountryID」而不是「CountryId」? :d

+0

intelisense ..哇謝謝 – Ilhan