为什么当我填充一个下拉列表本网站HTTP异常情况发生? [英] Why is this web http exception happening when I am populating a drop down list?
问题描述
型号
联盟
和 LeagueDivision
两种模型类
公共类联赛
{
公众诠释标识{搞定;组; }
公共字符串League1 {搞定;组; }
公共字符串图标{搞定;组; } 公共虚拟的ICollection< LeagueDivision> LeagueDivisions {搞定;组; }
}公共类LeagueDivision
{
公众诠释标识{搞定;组; }
公众可空< INT> LeagueId {搞定;组; }
公共字符串名称{;组; }
公共字符串图标{搞定;组; } 公共虚拟联赛{搞定;组; }
} 公共类ViewModelForHostBooster
{
[必需(的ErrorMessage =请输入价)]
[显示(名称=价格)]
公共十进制价格{搞定;组; } [必需(的ErrorMessage =请选择一个联赛)]
[显示(NAME =联盟)] 公众诠释? SelectedLeague {搞定;组; }
[必需(的ErrorMessage =请选择一个联赛师)]
[显示(NAME =联盟分部)] 公众诠释? SelectedLeagueDivision {搞定;组; } 公众的SelectList LeagueList {搞定;组; }
公众的SelectList LeagueDivisionList {搞定;组; }
}
控制器
在 IndexDropdown
行动,我只是填充视图与模型和验证,如果
该模型进行验证,然后填充视图否则返回该视图。在 FetchLeagueDivision
行动,我的基础上传递的参数ID选择Id和模型类的名称属性。
任何人可以指导我为什么 WebHttpException
是当我运行这片code的发生呢?这里是例外 HTTP异常图像
公共类的DropDownController:控制器
{
[HTTPGET]
公众的ActionResult IndexDropDown()
{
ViewModelForHostBooster模式=新ViewModelForHostBooster(); ConfigureViewModel(模型);
返回查看(模型);
} [HttpPost]
公众的ActionResult IndexDropDown(ViewModelForHostBooster模型)
{
如果(!ModelState.IsValid)
{
ConfigureViewModel(模型);
返回查看(模型);
} //保存和重定向
返回RedirectToAction(某处);
}
私人无效ConfigureViewModel(ViewModelForHostBooster模型)
{
HostBoostersDBEntities DB =新HostBoostersDBEntities(); VAR联赛= db.Leagues.Select(X =>新建{值= x.Id,文本= x.League1})了ToList();
model.LeagueList =新的SelectList(联赛,ID,League1); 如果(model.SelectedLeague.HasValue)
{
IEnumerable的< LeagueDivision> leaguedivisions = db.LeagueDivisions.Where(L => l.LeagueId == model.SelectedLeague.Value);
model.LeagueDivisionList =新的SelectList(leaguedivisions,ID,姓名);
}
其他
{
model.LeagueDivisionList =新的SelectList(Enumerable.Empty< SelectListItem>());
}
}
}
查看
@model HostBooster.Models.ViewModelForHostBooster
@using(Html.BeginForm())
{
< DIV>
@ Html.LabelFor(M = GT; m.Price)
@ Html.TextBoxFor(M = GT; m.Price)
@ Html.ValidationMessageFor(M = GT; m.Price)
< / DIV> < DIV>
@ Html.LabelFor(M = GT; m.SelectedLeague)
异常是发生在这里 @ Html.DropDownListFor(M => m.SelectedLeague,Model.LeagueList)
块引用>@ Html.DropDownListFor(M = GT; m.SelectedLeague,Model.LeagueList)
@ Html.ValidationMessageFor(M = GT; m.SelectedLeague)
< / DIV>
< DIV>
@ Html.LabelFor(M = GT; m.SelectedLeagueDivision)
@ Html.DropDownListFor(M = GT; m.SelectedLeagueDivision,Model.LeagueDivisionList)
@ Html.ValidationMessageFor(M = GT; m.SelectedLeagueDivision)
< / DIV>
<输入类型=提交值=拯救/>
}
解决方案在视图
Model.LeagueList
为空。它不能为空。
如果编辑视图code像这样(例如),效果很好:<身体GT;
@using(Html.BeginForm())
{
清单< SelectListItem>时listItems =新的List< SelectListItem>();
listItems.Add(新SelectListItem
{
文本=例1
VALUE =例1
});
listItems.Add(新SelectListItem
{
文本=例2
VALUE =例2
选择=真
});
listItems.Add(新SelectListItem
{
文本=例3
VALUE =例3
});
< DIV>
@ Html.LabelFor(M = GT; m.Price)
@ Html.TextBoxFor(M = GT; m.Price)
@ Html.ValidationMessageFor(M = GT; m.Price)
< / DIV> < DIV>
@ Html.LabelFor(M = GT; m.SelectedLeague)
@ Html.DropDownListFor(M = GT; m.SelectedLeague,listItems中)
@ Html.ValidationMessageFor(M = GT; m.SelectedLeague)
< / DIV>
< DIV>
@ Html.LabelFor(M = GT; m.SelectedLeagueDivision)
@ Html.DropDownListFor(M = GT; m.SelectedLeagueDivision,Model.LeagueDivisionList)
@ Html.ValidationMessageFor(M = GT; m.SelectedLeagueDivision)
< / DIV>
<输入类型=提交值=拯救/>
}
Model
League
andLeagueDivision
are two model classespublic class League { public int Id { get; set; } public string League1 { get; set; } public string Icon { get; set; } public virtual ICollection<LeagueDivision> LeagueDivisions { get; set; } } public class LeagueDivision { public int Id { get; set; } public Nullable<int> LeagueId { get; set; } public string Name { get; set; } public string Icon { get; set; } public virtual League League { get; set; } } public class ViewModelForHostBooster { [Required(ErrorMessage = "Please enter price")] [Display(Name = "Price")] public decimal Price { get; set; } [Required(ErrorMessage = "Please select a league")] [Display(Name = "League")] public int? SelectedLeague { get; set; } [Required(ErrorMessage = "Please select a league division")] [Display(Name = "League Division")] public int? SelectedLeagueDivision { get; set; } public SelectList LeagueList { get; set; } public SelectList LeagueDivisionList { get; set; } }
Controller
In
IndexDropdown
action I am just populating view with model and validating if the model is validated then populate the view otherwise return the view. InFetchLeagueDivision
action I am selecting Id and Name properties of model class based on passed argument ID.Can anybody guide me why a
WebHttpException
is happening when I run this piece of code? Here is a link of exception Http Exception Imagepublic class DropDownController : Controller { [HttpGet] public ActionResult IndexDropDown() { ViewModelForHostBooster model = new ViewModelForHostBooster(); ConfigureViewModel(model); return View(model); } [HttpPost] public ActionResult IndexDropDown(ViewModelForHostBooster model) { if (!ModelState.IsValid) { ConfigureViewModel(model); return View(model); } // save and redirect return RedirectToAction("Somewhere"); } private void ConfigureViewModel(ViewModelForHostBooster model) { HostBoostersDBEntities db = new HostBoostersDBEntities(); var leagues = db.Leagues.Select(x => new { Value = x.Id, Text = x.League1 }).ToList(); model.LeagueList = new SelectList(leagues, "Id", "League1"); if (model.SelectedLeague.HasValue) { IEnumerable<LeagueDivision> leaguedivisions = db.LeagueDivisions.Where(l => l.LeagueId == model.SelectedLeague.Value); model.LeagueDivisionList = new SelectList(leaguedivisions, "Id", "Name"); } else { model.LeagueDivisionList = new SelectList(Enumerable.Empty<SelectListItem>()); } } }
View
@model HostBooster.Models.ViewModelForHostBooster @using (Html.BeginForm()) { <div> @Html.LabelFor(m => m.Price) @Html.TextBoxFor(m => m.Price) @Html.ValidationMessageFor(m => m.Price) </div> <div> @Html.LabelFor(m => m.SelectedLeague)
exception is occurring here @Html.DropDownListFor(m => m.SelectedLeague, Model.LeagueList)
@Html.DropDownListFor(m => m.SelectedLeague, Model.LeagueList) @Html.ValidationMessageFor(m => m.SelectedLeague) </div> <div> @Html.LabelFor(m => m.SelectedLeagueDivision) @Html.DropDownListFor(m => m.SelectedLeagueDivision, Model.LeagueDivisionList) @Html.ValidationMessageFor(m => m.SelectedLeagueDivision) </div> <input type="submit" value="save" /> }
解决方案In view
Model.LeagueList
is null. It should not be null. if edit view code like this(for example), Works well:<body> @using (Html.BeginForm()) { List<SelectListItem> listItems = new List<SelectListItem>(); listItems.Add(new SelectListItem { Text = "Example1", Value = "Example1" }); listItems.Add(new SelectListItem { Text = "Example2", Value = "Example2", Selected = true }); listItems.Add(new SelectListItem { Text = "Example3", Value = "Example3" }); <div> @Html.LabelFor(m => m.Price) @Html.TextBoxFor(m => m.Price) @Html.ValidationMessageFor(m => m.Price) </div> <div> @Html.LabelFor(m => m.SelectedLeague) @Html.DropDownListFor(m => m.SelectedLeague, listItems) @Html.ValidationMessageFor(m => m.SelectedLeague) </div> <div> @Html.LabelFor(m => m.SelectedLeagueDivision) @Html.DropDownListFor(m => m.SelectedLeagueDivision, Model.LeagueDivisionList) @Html.ValidationMessageFor(m => m.SelectedLeagueDivision) </div> <input type="submit" value="save" /> }
这篇关于为什么当我填充一个下拉列表本网站HTTP异常情况发生?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!