代码之家  ›  专栏  ›  技术社区  ›  Jose Ortega

ModelBinding问题

  •  0
  • Jose Ortega  · 技术社区  · 9 年前

    我不清楚为什么这不起作用

    public class Regiones
    {
        [DisplayName("Select the region")]
        public int SelectedId { get; set; }
        public IEnumerable<SelectListItem> SelectedRegion { get; set; }
        public Regiones()
        {
            SelectedRegion = new[]{
                new SelectListItem { Value = "BR", Text = "Brasil" },
                new SelectListItem { Value = "EUNE", Text = "Europe East" },
                new SelectListItem { Value = "EUW", Text = "Europe West" },
                new SelectListItem { Value = "KR", Text = "Korea" },
                new SelectListItem { Value = "LAN", Text = "Latin America North" },
                new SelectListItem { Value = "LAS", Text = "Latin America South" },
                new SelectListItem { Value = "NA", Text = "Northamerica" },
                new SelectListItem { Value = "OCE", Text = "Oceania" },
                new SelectListItem { Value = "TR", Text = "Tr" },
                new SelectListItem { Value = "PBE", Text = "PBE" },
                new SelectListItem { Value = "Global", Text = "Global" }
            };
        }
    }
    

    控制器:

    public class FeaturedGamesController : Controller   
    {
        public ActionResult Index()
        {
            Regiones region = new Regiones();
            return View(region);
        }
    
        [HttpPost]
        public ActionResult Featured(Regiones region)
        {
            string selectedregion =             region.SelectedRegion.ElementAt(region.SelectedId).Text;
        }
    

    视图:

    <div class="row">
    <div class="col-md-12 text-center">
        @using (@Html.BeginForm("Featured", "FeaturedGames", FormMethod.Post, new { id = "form" }))
        {
            @Html.AntiForgeryToken();
            <div class="row">
                <div class="col-md-10 col-md-offset-2">
                    <fieldset>
                        <div class="col-md-3">
                            @Html.LabelFor(x => x.SelectedId)
                        </div>
    
                        <div class="col-md-2">
                            @Html.DropDownListFor(x => x.SelectedId, Model.SelectedRegion, new { @id = "regiones" })
                        </div>
    
                        <div class="col-md-2">
    
                            <input type="submit" class="btn btn-default" value="Execute" />
                        </div>
                    </fieldset>
                </div>
            </div>
    
        }
    </div>
    

    我 已经尝试过: How to go to particular Item in IEnumerable 并且: Pass SelectedValue of DropDownList in Html.BeginForm() in ASP.NEt MVC 3

    当我单击发送时,SelectedId中的结果总是0。。。

    我会错过什么?提前谢谢你

    1 回复  |  直到 7 年前
        1
  •  2
  •   Sateesh Pagolu    9 年前

    问题是你的 Value string 键入 SelectListItem 但你的 SelectedId 为int类型。

    价值 下面一行中的是类型 一串

    new SelectListItem { Value = "BR", Text = "Brasil" },
    

    selectedid 下面的代码行是 int .

    [DisplayName("Select the region")]
        public int SelectedId { get; set; }
    

    因此,该值在转换中丢失。改变 所选ID 的数据类型 一串 以解决问题。

    在这里摆弄: https://dotnetfiddle.net/SDZZks