@ Html.ListBox用于使用和创建问题

时间:2012-08-22 02:12:59

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

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

我有3个问题:

  1. 如何确定所选列表的属性?
  2. 如何获得初始空列表( list2 )? list1 是否填充了项目?
  3. 如果点击提交按钮,如何将所有 list2 项目退回到模型?
  4. 型号:

    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>
    

1 个答案:

答案 0 :(得分:11)

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

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

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

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