【问题标题】:@Html.ListBoxFor usage and creation questions@Html.ListBox 使用和创建问题
【发布时间】:2012-08-17 10:15:34
【问题描述】:

我有一个带有 2 个列表框 (list1, list2) 的网页,我可以将项目从一个列表框移到另一个列表框并返回。当我点击提交按钮时,我想将 list2 中的所有项目值返回给 httppost 方法。

我有 3 个问题:

  1. 如何确定选中列表的属性?
  2. 如何有一个初始的空列表(对于list2)? list1 已填充项目?
  3. 当点击提交按钮时,如何将所有 list2 项返回给模型?

型号:

public class TestModel
{
    public List<SelectListItem> OptionList { get; set; }
    public List<SelectListItem> SelectedOptionList { get; set; }
    public string[] SelectedOptions { get; set; }
}

控制器:

private TestModel testModel  = new TestModel();

public ActionResult TestPage()
{
    ViewBag.Message = "Test Page";

    testModel.OptionList = new List<SelectListItem>();

    for (int i = 1; i <= 100; i++)
    {
        SelectListItem item = new SelectListItem();
        item.Text = "Option " + i.ToString();
        item.Value = item.Text;

        testModel.OptionList.Add(item);
    }

    return View("TestView", testModel);
}

[HttpPost]
public ActionResult TestPage(TestModel formModel)
{
    testModel.SelectedOptionList = formModel.SelectedOptionList;
    testModel.SelectedOptions = formModel.SelectedOptions;

    //do something
    return RedirectToAction("TestPage");
}

查看:

@model EngineeringDataAnalysisGui.Models.TestModel

@{
    ViewBag.Title = @ViewBag.Message;
}

@section Subtitle
{
    @ViewBag.Message
}

<table width="100%">
@using (Html.BeginForm("TestPage", "RetrieveData", FormMethod.Post))
{
    <tr>
        <td>Event List:</td>
        <td>@Html.ListBox("lstEventSelection", Model.OptionList, new { id = "list1", Multiple = "multiple", Size = 15, style = "width: 100%;" })</td>
    </tr>
    <tr>
        <td></td>
        <td>
            <table style="text-align:center; width: 100%">
                <tr>
                    <td id="buttonCol">
                        <input type="button" id="btnAddAllEvent" title="Add All Events" onclick="moveAllOptions('list1','list2', true)" />
                        <input type="button" id="btnAddEvent" title="Add Selected Events" onclick="moveSelectedOptions('list1','list2', true)" />
                    </td>
                    <td id="buttonCol">
                        <input type="button" id="btnRemoveEvent" title="Remove Selected Events" onclick="moveSelectedOptions('list2','list1', true)" />
                        <input type="button" id="btnRemoveAllEvent" title="Remove All Events" onclick="moveAllOptions('list2','list1', true)" />
                    </td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>Selected Event List:</td>
        @*Not sure how to add the listbox*@
        <td>@*Wrong*@@Html.ListBoxFor(x => x.SelectedOptions, Model.SelectedOptionList, new { id = "list2", Multiple = "multiple", Size = 15, style = "width: 100%;" })</td>
    </tr>
    <tr>
        <td><input type="submit" value="submit" /></td>
    </tr>
}
</table>

【问题讨论】:

    标签: asp.net-mvc razor html.listboxfor


    【解决方案1】:

    1) 如何确定选中列表的属性?
    @Html.ListBoxFor(x =&gt; x.SelectedOptions, new MultiSelectList(Model.SelectedOptionList), new { id = "list2", Multiple = "multiple", Size = 15, style = "width: 100%;" })

    2) 如何有一个初始的空列表(对于 list2)? list1 已填充项目。 在控制器中设置一个空列表testModel.SelectedOptionList = new List&lt;SelectListItem&gt;();

    3) 单击提交按钮时如何将所有 list2 项返回到模型
    可能您需要在提交之前将 list2 中的所有项目设置为已选择(使用 jquery)。 list2 项目中的所有选定项目将在提交时绑定到 TestModel.SelectedOptions。

    请环顾四周,SO 中已经有很多与 Html.ListBoxFor 相关的答案。例如Challenges with selecting values in ListBoxFor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多