Html.DropDownListFor默认选中的值不起作用

时间:2017-09-19 13:10:12

标签: html.dropdownlistfor selectlist

我已经阅读了数百篇有关此问题的帖子,我仍然无法找到解决方案。

请帮助解决这个可怕的错误;

我想在DropDownListFor中使用不同的默认值。 “PartialViewList1存在4个项目中。 我希望DropDownListFor选择当前项的id。 (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

1 个答案:

答案 0 :(得分:0)

我希望也许有人可以用它来解决他或她的问题。

Stephen Mueke找到了解决方案。问题是如果&#34; x =&gt; x.PartialView.Id&#34;已经有一个值,然后是默认值:&#34; 3&#34;将由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