2015-09-14 48 views
0

问题我不明白为什么这不工作与ModelBinding

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 ...

我能会丢失?并提前感谢您

+0

您是否尝试过这样的事情 'region.SelectedRegion.ToList()其中(x => x.Value == region.SelectedId).Text' – DarkKnight

+0

的一点是,当正在提交表格。它看起来像空然后“SelectedId总是= 0”,并没有得到coorect值。模型“控制器中的区域”(回传)它总是空的... –

回答

2

问题是您的Valuestring键入SelectListItem但您的SelectedId是int类型。

Value在下面行是类型string

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

selectedid的在下面的代码行是int

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

因此,该值在转换中丢失。将SelectedId的数据类型更改为string以解决该问题。

小提琴这里:https://dotnetfiddle.net/SDZZks

+0

谢谢你的男人你的回答非常好! –