當我把我的視圖模型後到我的控制器(沒有選擇的城市),我得到一個預期的「需要城市」的錯誤,但是當我選擇一個城市(第一列表中的發言權)和那麼我有另一個錯誤(例如名字丟失),所以我的模型狀態仍然無效,它將我重定向到初始頁面,並從底部突然選擇一些城市(或隨機時間)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; }
}
}
嘗試添加cityList.Insert(0,新SelectListItem {值= 「」,文本= 「選擇城市」});你(在控制器一旦在視圖一次)設置前SelectListCities歡迎使用屬性上我試過模式 –
但只是導致「選擇的城市」正被顯示兩次 – Ilhan
@Ilhan我可以看到'RegisteredVisitorVM' – CodingYoshi