2017-09-19 73 views
0

我已阅读数百篇关于此问题的文章,但我仍无法找到解决方案。Html.DropDownListFor默认选定值不起作用

请帮助这个可怕的神秘;

我想在我的DropDownListFor中有不同的默认值。 (item.id)

但是由于测试的目的,我只填写了“3”,即使这样也没有,将不起作用。

模型是正确填写,我能够加入控制器的更多的代码,但不会增加太多。但是,如果你要我请你。

是的,我知道这最好在控制器中制作SelectList,但首先我想让它工作。

查看:

@foreach (var item in Model.PartialViewList1) 
    { 
     <tr> 
      <td>Plaats: </td> 
      <td>@item.PlaceNumber</td> 
      <td> 
       @Html.DropDownListFor(x => x.PartialView.Id, new SelectList(Model.PartialViewList2, "Id", "Name", 3), 
       new { onchange = "this.form.submit();" })</td> 
     </tr> 
    } 

Screen shot of the users view

+0

其PartialView.Id'的'决定选择什么值(即如何模型绑定的作品 - 它** **绑定到你的财产值(绑定到属性时,“SelectList”构造函数的最后一个参数将被忽略)。但是你的代码没有任何意义 - 你为同一个属性生成多个下拉列表,所以它不清楚你想在这里做什么 –

+0

我在一个屏幕上有4个partialviews。我希望用户能够更改屏幕上每个可用位置的partialview。所以我使用“PartialViewList1”来获取每个partialview的PlaceNumber。我使用“PartialViewList2”来获取部分视图的名称。 但我发现你在这个页面上说的是:https://nimblegecko.com/how-to-set-default-selected-value-on-drop-down-list-from-database/ 根据段落:“危险警告,有龙。“ –

+0

是的,你为什么生成4个下拉列表?他们都绑定到相同的属性,这是没有意义的 –

回答

0

我希望,也许有人可以用这个为他或她的问题。

与Stephen Mueke我找到了解决方案。问题是如果“x => x.PartialView.Id”已经有一个值,那么默认值:“3”将被Id覆盖。

而你不能生成多个DropDownlistFor的同时绑定到同一个属性。

我对我的问题的解决方案:

查看:

@using (Html.BeginForm("_PartialSettingsDropDownList1", "Home")){ 
<table> 
    @for (int i = 0; i < Model.maxNumberOfViews; i++) 
    { 
     <tr> 
      <td> 
       Plaats @(i+1) 
      </td> 
      <td> 
       @Html.DropDownListFor(x => Model.PartialViewList[i].ID, new SelectList(Model.PartialViewList, "Id", "Name", Model.PartialViewList[i].ID), "select") 
      </td> 
     </tr> 
    } 
</table> 

@Html.HiddenFor(x => x.maxNumberOfViews) 

<input class="submit" type="submit" value="Submit" />} 

控制器:

[HttpGet] 
    public PartialViewResult _PartialSettingsDropDownList1() 
    { 
     PartialScreenViewModel viewModel = new PartialScreenViewModel(); 
     viewModel.PartialViewList = homeModel.AllBoxViews(databaseRepository.PartialViews); 
     viewModel.maxNumberOfViews = viewModel.PartialViewList.Count(); 

     return PartialView(viewModel); 
    } 

    [HttpPost] 
    public RedirectResult _PartialSettingsDropDownList1(PartialScreenViewModel viewModel) 
    { 
     for (int i = 0; i < viewModel.maxNumberOfViews; i++) 
     { 
      PartialView viewOnScreen = databaseRepository.PartialViews.FirstOrDefault(x => x.ID == viewModel.PartialViewList[i].ID); 
      databaseRepository.UpdatePartialView(viewOnScreen, i+1); 
     } 

     return new RedirectResult("Settings"); 
    } 

型号:

public List<PartialView> AllBoxViews(IEnumerable<PartialView> allViews) 
    { 
     List<PartialView> OnlyBoxViews = new List<PartialView>(); 
     foreach (var item in allViews.Where(item => item.Type.Equals("box"))) 
     { 
      OnlyBoxViews.Add(item); 
     } 

     return OnlyBoxViews; 
    } 

视图模型:

public class PartialScreenViewModel 
{ 
    public List<PartialView> PartialViewList { get; set; } 
    public int maxNumberOfViews { get; set; } 
} 

结果在屏幕上:screenshot