为什么当我填充一个下拉列表本网站HTTP异常情况发生? [英] Why is this web http exception happening when I am populating a drop down list?

查看:115
本文介绍了为什么当我填充一个下拉列表本网站HTTP异常情况发生?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

型号

联盟 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())
    {
        < D​​IV>
            @ Html.LabelFor(M = GT; m.Price)
            @ Html.TextBoxFor(M = GT; m.Price)
            @ Html.ValidationMessageFor(M = GT; m.Price)
        < / DIV>        < D​​IV>
            @ 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>
        < D​​IV>
            @ 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
    });
    < D​​IV>
        @ Html.LabelFor(M = GT; m.Price)
        @ Html.TextBoxFor(M = GT; m.Price)
        @ Html.ValidationMessageFor(M = GT; m.Price)
    < / DIV>    < D​​IV>
        @ Html.LabelFor(M = GT; m.SelectedLeague)
        @ Html.DropDownListFor(M = GT; m.SelectedLeague,listItems中)
        @ Html.ValidationMessageFor(M = GT; m.SelectedLeague)
    < / DIV>
    < D​​IV>
        @ Html.LabelFor(M = GT; m.SelectedLeagueDivision)
        @ Html.DropDownListFor(M = GT; m.SelectedLeagueDivision,Model.LeagueDivisionList)
        @ Html.ValidationMessageFor(M = GT; m.SelectedLeagueDivision)
    < / DIV>
    <输入类型=提交值=拯救/>
}


Model

League and LeagueDivision are two model classes

public 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. In FetchLeagueDivision 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 Image

public 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆