【问题标题】:Why is this web http exception happening when I am populating a drop down list?为什么在我填充下拉列表时会发生此 Web http 异常?
【发布时间】:2016-07-03 07:49:07
【问题描述】:

型号

LeagueLeagueDivision 是两个模型类

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; }      


    }

控制器

IndexDropdown 操作中,我只是用模型填充视图并验证是否 验证模型然后填充视图,否则返回视图。在FetchLeagueDivision 操作中,我根据传递的参数 ID 选择模型类的 Id 和 Name 属性。

谁能指导我为什么在我运行这段代码时会出现WebHttpException?这是异常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>());
        }
    }
}

查看

@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)

这里发生异常 @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" />
    }

【问题讨论】:

  • 请更新 ViewModelForHostBooster。
  • @StephenMuecke imgur.com/gallery/EnRhw00/new 这是视图模型的定义。我正在尝试分享另一张异常图片,但 imgur 不允许我...我只分享一张图片并收到消息说我分享太快请等待 50 分钟
  • @StephenMuecke DataBinding: 'f__AnonymousType0`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version= 4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]' 不包含名为“Id”的属性。这是浏览器中的错误消息
  • @StephenMuecke 异常发生在第 (59) 行 第 57 行:
    第 58 行:@Html.LabelFor(m => m.SelectedLeague) 第 59 行:@Html.DropDownListFor(m => m.SelectedLeague, Model.LeagueList) 第 60 行:@Html.ValidationMessageFor(m => m.SelectedLeague) 第 61 行:
  • @StephenMuecke 亲爱的,对不起,我无法理解您的评论“它需要出现在您的问题中(不接受与问题相关的代码图像链接)”

标签: c# asp.net asp.net-mvc razor drop-down-menu


【解决方案1】:

在视图中Model.LeagueList 为空。它不应该为空。 如果像这样编辑视图代码(例如),效果很好:

<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" />
}

【讨论】:

  • 感谢您的指导..我已经成功实施...现在我正在尝试为此实施 Httppost 方法,但出现异常。请检查此链接并指导我如何处理此异常stackoverflow.com/questions/38180372/…
  • @Sulaiman 如果这个答案对你有帮助,请点赞并接受这个答案,所以人们知道这是正确的答案。
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 2023-03-11
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
相关资源
最近更新 更多