遇到一个问题,是性别方面,然后我注册的时候性别不显示 男or女,显示的是0-1,但是修改的时候会显示正常的下拉框选中性别,下面是代码,一下午了头都晕了
1 using System.Collections.Generic; 2 using System.Data.Entity; 3 using System.Linq; 4 using System.Net; 5 using System.Web.Mvc; 6 using MvcDemoTestThree._24.Models; 7 using System; 8 9 namespace MvcDemoTestThree._24.Controllers 10 { 11 [Authorize] 12 public class StudentsController : Controller 13 { 14 15 private StudentDbContext db = new StudentDbContext(); 16 17 // GET: Students 18 public ActionResult Index() 19 { 20 ViewBag.MajorList = GetMajorList(); 21 return View(db.Students.ToList()); 22 } 23 24 // GET: Students/Details/5 25 public ActionResult Details(int? id) 26 { 27 if (id == null) 28 { 29 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 30 } 31 Student student = db.Students.Find(id); 32 if (student == null) 33 { 34 return HttpNotFound(); 35 } 36 return View(student); 37 } 38 39 // GET: Students/Create 40 public ActionResult Create() 41 { 42 return View(); 43 } 44 45 // POST: Students/Create 46 // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 47 // 详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=317598。 48 [HttpPost] 49 [ValidateAntiForgeryToken] //用来阻止CSRF(跨站请求伪造) Bind:用来阻止Over-Posting(过多提交攻击)。 50 public ActionResult Create([Bind(Include = "ID,Name,Gender,Major,EntranceDate")] Student student) 51 { 52 if (ModelState.IsValid) 53 { 54 db.Students.Add(student); 55 db.SaveChanges(); 56 return RedirectToAction("Index"); 57 } 58 ViewBag.GenderList = GetGenderList(); 59 return View(student); 60 } 61 62 63 // GET: Students/Edit/5 64 public ActionResult Edit(int? id) 65 { 66 if (id == null) 67 { 68 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 69 } 70 Student student = db.Students.Find(id); 71 if (student == null) 72 { 73 return HttpNotFound(); 74 } 75 ViewBag.GenderList = GetGenderList(); 76 return View(student); 77 } 78 79 private List<SelectListItem> GetGenderList() 80 { 81 return new List<SelectListItem>() { 82 new SelectListItem() 83 { 84 Text = "男", 85 Value = "1" 86 }, 87 new SelectListItem() 88 { 89 Text = "女", 90 Value = "0" 91 } 92 }; 93 } 94 95 // POST: Students/Edit/5 96 // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 97 // 详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=317598。 98 [HttpPost] 99 [ValidateAntiForgeryToken] 100 public ActionResult Edit([Bind(Include = "ID,Name,Gender,Major,EntranceDate")] Student student) 101 { 102 if (ModelState.IsValid) 103 { 104 db.Entry(student).State = EntityState.Modified; 105 db.SaveChanges(); 106 return RedirectToAction("Index"); 107 } 108 ViewBag.GenderList = GetGenderList(); 109 return View(student); 110 } 111 112 // GET: Students/Delete/5 113 public ActionResult Delete(int? id) 114 { 115 if (id == null) 116 { 117 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 118 } 119 Student student = db.Students.Find(id); 120 if (student == null) 121 { 122 return HttpNotFound(); 123 } 124 return View(student); 125 } 126 127 // POST: Students/Delete/5 128 [HttpPost, ActionName("Delete")] 129 [ValidateAntiForgeryToken] 130 public ActionResult DeleteConfirmed(int id) 131 { 132 Student student = db.Students.Find(id); 133 db.Students.Remove(student); 134 db.SaveChanges(); 135 return RedirectToAction("Index"); 136 } 137 138 protected override void Dispose(bool disposing) 139 { 140 if (disposing) 141 { 142 db.Dispose(); 143 } 144 base.Dispose(disposing); 145 } 146 147 #region GetMajorList 148 private List<SelectListItem> GetMajorList() 149 { 150 var majors = db.Students.OrderBy(m => m.Major).Select(m => m.Major).Distinct(); 151 152 var items = new List<SelectListItem>(); 153 foreach (string major in majors) 154 { 155 items.Add(new SelectListItem 156 { 157 Text = major, 158 Value = major 159 }); 160 } 161 return items; 162 } 163 #endregion 164 165 166 #region 根据条件模糊查询Index 167 [HttpPost] 168 [ValidateAntiForgeryToken] 169 public ActionResult Index(string Major, string Name) 170 { 171 var students = db.Students as IQueryable<Student>; 172 if (!String.IsNullOrEmpty(Name)) 173 { 174 students = students.Where(m => m.Name.Contains(Name)); 175 } 176 177 if (!String.IsNullOrEmpty(Major)) 178 { 179 students = students.Where(m => m.Major == Major); 180 } 181 182 ViewBag.MajorList = GetMajorList(); 183 return View(students.ToList()); 184 } 185 #endregion 186 187 } 188 }
1 @model MvcDemoTestThree._24.Models.Student 2 3 @{ 4 ViewBag.Title = "Edit"; 5 } 6 7 <h2>Edit</h2> 8 9 10 @using (Html.BeginForm()) 11 { 12 @Html.AntiForgeryToken() 13 14 <div class="form-horizontal"> 15 <h4>Student</h4> 16 <hr /> 17 @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 18 @Html.HiddenFor(model => model.ID) 19 20 <div class="form-group"> 21 @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 22 <div class="col-md-10"> 23 @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 24 @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 25 </div> 26 </div> 27 28 <div class="form-group"> 29 @Html.LabelFor(model => model.Gender, htmlAttributes: new { @class = "control-label col-md-2" }) 30 <div class="col-md-10"> 31 @Html.DropDownListFor(model => model.Gender,ViewBag.GenderList as IEnumerable<SelectListItem>, new { @class = "form-control" }) 32 @Html.ValidationMessageFor(model => model.Gender, "", new { @class = "text-danger" }) 33 </div> 34 </div> 35 36 <div class="form-group"> 37 @Html.LabelFor(model => model.Major, htmlAttributes: new { @class = "control-label col-md-2" }) 38 <div class="col-md-10"> 39 @Html.EditorFor(model => model.Major, new { htmlAttributes = new { @class = "form-control" } }) 40 @Html.ValidationMessageFor(model => model.Major, "", new { @class = "text-danger" }) 41 </div> 42 </div> 43 44 <div class="form-group"> 45 @Html.LabelFor(model => model.EntranceDate, htmlAttributes: new { @class = "control-label col-md-2" }) 46 <div class="col-md-10"> 47 @Html.EditorFor(model => model.EntranceDate, new { htmlAttributes = new { @class = "form-control" } }) 48 @Html.ValidationMessageFor(model => model.EntranceDate, "", new { @class = "text-danger" }) 49 </div> 50 </div> 51 52 <div class="form-group"> 53 <div class="col-md-offset-2 col-md-10"> 54 <input type="submit" value="Save" class="btn btn-default" /> 55 </div> 56 </div> 57 </div> 58 } 59 60 <div> 61 @Html.ActionLink("Back to List", "Index") 62 </div> 63 64 @section Scripts { 65 @Scripts.Render("~/bundles/jqueryval") 66 }
1 @model MvcDemoTestThree._24.Models.Student 2 3 @{ 4 ViewBag.Title = "Create"; 5 } 6 7 <h2>Create</h2> 8 9 10 @using (Html.BeginForm()) 11 { 12 @Html.AntiForgeryToken() 13 14 <div class="form-horizontal"> 15 <h4>Student</h4> 16 <hr /> 17 @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 18 <div class="form-group"> 19 @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 20 <div class="col-md-10"> 21 @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 22 @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 23 </div> 24 </div> 25 26 <div class="form-group"> 27 @Html.LabelFor(model => model.Gender, htmlAttributes: new { @class = "control-label col-md-2" }) 28 <div class="col-md-10"> 29 @Html.DropDownListFor(model => model.Gender, ViewBag.GenderList as IEnumerable<SelectListItem>, new { @class = "form-control" }) 30 @Html.ValidationMessageFor(model => model.Gender, "", new { @class = "text-danger" }) 31 </div> 32 </div> 33 34 <div class="form-group"> 35 @Html.LabelFor(model => model.Major, htmlAttributes: new { @class = "control-label col-md-2" }) 36 <div class="col-md-10"> 37 @Html.EditorFor(model => model.Major, new { htmlAttributes = new { @class = "form-control" } }) 38 @Html.ValidationMessageFor(model => model.Major, "", new { @class = "text-danger" }) 39 </div> 40 </div> 41 42 <div class="form-group"> 43 @Html.LabelFor(model => model.EntranceDate, htmlAttributes: new { @class = "control-label col-md-2" }) 44 <div class="col-md-10"> 45 @Html.EditorFor(model => model.EntranceDate, new { htmlAttributes = new { @class = "form-control" } }) 46 @Html.ValidationMessageFor(model => model.EntranceDate, "", new { @class = "text-danger" }) 47 </div> 48 </div> 49 50 <div class="form-group"> 51 <div class="col-md-offset-2 col-md-10"> 52 <input type="submit" value="Create" class="btn btn-default" /> 53 </div> 54 </div> 55 </div> 56 } 57 58 <div> 59 @Html.ActionLink("Back to List", "Index") 60 </div> 61 62 @section Scripts { 63 @Scripts.Render("~/bundles/jqueryval") 64 }
@Html.DropDownListFor(model => model.Gender, ViewBag.GenderList as IEnumerable<SelectListItem>, new { @class = "form-control" })
“/”应用程序中的服务器错误。
不存在具有键“Gender”的“IEnumerable<SelectListItem>”类型的 ViewData 项。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: 不存在具有键“Gender”的“IEnumerable<SelectListItem>”类型的 ViewData 项。
源错误:
行 27: @Html.LabelFor(model => model.Gender, htmlAttributes: new { @class = "control-label col-md-2" })
行 28: <div class="col-md-10">
行 29: @Html.DropDownListFor(model => model.Gender, ViewBag.GenderList as IEnumerable<SelectListItem>, new { @class = "form-control" })
行 30: @Html.ValidationMessageFor(model => model.Gender, "", new { @class = "text-danger" })
行 31: </div>
|
源文件: d:\C#基础练习\MVC4_3_15\MvcApplication1\MvcDemoTestThree.24\Views\Students\Create.cshtml 行: 29
堆栈跟踪:
[InvalidOperationException: 不存在具有键“Gender”的“IEnumerable<SelectListItem>”类型的 ViewData 项。] System.Web.Mvc.Html.SelectExtensions.GetSelectData(HtmlHelper htmlHelper, String name) +265 System.Web.Mvc.Html.SelectExtensions.SelectInternal(HtmlHelper htmlHelper, ModelMetadata metadata, String optionLabel, String name, IEnumerable`1 selectList, Boolean allowMultiple, IDictionary`2 htmlAttributes) +255 System.Web.Mvc.Html.SelectExtensions.DropDownListHelper(HtmlHelper htmlHelper, ModelMetadata metadata, String expression, IEnumerable`1 selectList, String optionLabel, IDictionary`2 htmlAttributes) +56 System.Web.Mvc.Html.SelectExtensions.DropDownListFor(HtmlHelper`1 htmlHelper, Expression`1 expression, IEnumerable`1 selectList, String optionLabel, IDictionary`2 htmlAttributes) +234 System.Web.Mvc.Html.SelectExtensions.DropDownListFor(HtmlHelper`1 htmlHelper, Expression`1 expression, IEnumerable`1 selectList, Object htmlAttributes) +141 ASP._Page_Views_Students_Create_cshtml.Execute() in d:\C#基础练习\MVC4_3_15\MvcApplication1\MvcDemoTestThree.24\Views\Students\Create.cshtml:29 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +270 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +121 System.Web.WebPages.StartPage.RunPage() +63 System.Web.WebPages.StartPage.ExecutePageHierarchy() +100 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +131 System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +695 System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +382 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +431 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +39 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +116 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +529 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +106 System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +321 System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185 System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40 System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44 System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39 System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +39 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9744373 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 |
这是错误信息,真的弄的头晕了
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.ComponentModel.DataAnnotations; 5 using System.Data.Entity; 6 using System.Linq; 7 using System.Web; 8 9 namespace MvcDemoTestThree._24.Models 10 { 11 public class Student 12 { 13 14 /// <summary> 15 /// 创建五个属性 16 /// </summary> 17 18 public int ID { get; set; } 19 [Required] 20 [DisplayName("姓名")] 21 [StringLength(200,MinimumLength=2)] 22 public string Name { get; set; } 23 [DisplayName("性别")] 24 [Required] 25 [Range(0,1)] 26 public int Gender { get; set; } 27 [Required] 28 [DisplayName("专业")] 29 [StringLength(200)] 30 public string Major { get; set; } 31 [DisplayName("出生日期")] 32 [DataType(DataType.Date)] 33 [DisplayFormat(DataFormatString = ("{0:yyyy-MM-dd}"),ApplyFormatInEditMode=true)] 34 public DateTime EntranceDate { get; set; } 35 } 36 37 38 /// <summary> 39 /// 创建数据库 40 /// </summary> 41 42 public class StudentDbContext:DbContext 43 { 44 public DbSet<Student> Students { get; set; } 45 } 46 47 }
参考 Create DropDownList using HtmlHelper :
public class Student
{
public int StudentId { get; set; }
[Display(Name="Name")]
public string StudentName { get; set; }
public Gender StudentGender { get; set; }
}
public enum Gender
{
Male,
Female
}
@model Student
@Html.DropDownList("StudentGender",
new SelectList(Enum.GetValues(typeof(Gender))),
"Select Gender",
new { @class = "form-control" })
model.Gender的类型是如何定义的?
– dudu 6年前@dudu: [DisplayName("性别")][Required]
– 猪zzZ 6年前[Range(0,1)]
public int Gender { get; set; }