Jquery 引导选项卡+;根据模型值下拉选定项

Jquery 引导选项卡+;根据模型值下拉选定项,jquery,asp.net-mvc,twitter-bootstrap,Jquery,Asp.net Mvc,Twitter Bootstrap,我有一个(可能很简单)问题。 我真的很难解释我到底想做什么 我有一个页面循环浏览项目列表,并为每个项目创建一个新选项卡。 我在使用引导标签 (这很有效) 我知道这是可怕的MVC->但我对web开发相当陌生-这就是为什么我感觉自己像是在atm池的最深处 @foreach (var item in Model.Items) { <li role="presentation"> <a href="#@item

我有一个(可能很简单)问题。 我真的很难解释我到底想做什么

我有一个页面循环浏览项目列表,并为每个项目创建一个新选项卡。 我在使用引导标签 (这很有效) 我知道这是可怕的MVC->但我对web开发相当陌生-这就是为什么我感觉自己像是在atm池的最深处

  @foreach (var item in Model.Items)
        {
            <li role="presentation">
                <a href="#@item.EndDate.ToString("M").Replace(" ", "")" aria-controls="@item.EndDate.ToString("M").Replace(" ", "")" role="tab" data-toggle="tab">@item.EndDate.ToString("d")</a>
            </li>
        }
    @using (Html.BeginForm())
    {
    <div class="tab-content col-md-10">

        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
        @foreach (var item in Model.Items)
        {
            <div role="tab-pane" class="tab-pane" id="@item.EndDate.ToString("M").Replace(" ", "")">
                <div class="col-md-5">
                    <div>
                        @Html.LabelFor(mx => item.Assignment)
                    </div>
                   etc...
@foreach(Model.Items中的变量项)
{
  • } @使用(Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) @foreach(Model.Items中的var项) { @LabelFor(mx=>item.Assignment) 等
    在每个选项卡中,我都有一些文本框和其他内容,还有一个下拉列表,它基本上是其他内容的选择器

    <div>
       @{
            var listItems = new List<ListItem> { new ListItem { Text = "Calendar", Value = "Calendar" }, new ListItem { Text = "Email", Value = "Email" } };
        }
        @Html.DropDownListFor(x => item.Type, new SelectList(listItems), "-- Select Type --", new { @id = item.ItemId +"_TypeSelector", @class="TypeSelector" })
        @Html.ValidationMessageFor(x => item.Type)
    </div>
    
    
    @{
    var listItems=new List{new ListItem{Text=“Calendar”,Value=“Calendar”},new ListItem{Text=“Email”,Value=“Email”};
    }
    @DropDownListFor(x=>item.Type,new SelectList(listItems),“--Select Type--”,new{@id=item.ItemId+“_TypeSelector”,@class=“TypeSelector”})
    @Html.ValidationMessageFor(x=>item.Type)
    
    我的问题;

    下拉列表未根据模型值选择正确的值


    提前感谢。

    foreach
    循环中呈现集合将给控件提供重复的名称,因此您将无法回发并绑定到集合。您可以通过使用
    for
    循环或使用自定义
    编辑器模板来正确处理此问题。不幸的是
    @Html.DropDownListFor()
    对于服务器在循环()中查看绑定来说无法正常工作,因此在您的情况下,您需要使用
    EditorTemplate

    生成选项的方式也没有多大意义,这意味着每次迭代都要创建一个新的
    SelectList
    。这应该在控制器中创建,并作为视图模型中的属性或通过
    ViewBag
    传递,如下所示

    List<string> items = new List<string>(){ "Calendar", "Email" };
    ViewBag.ItemList = new SelectList(items);
    
    在主要观点中

    @using (Html.BeginForm())
    {
      @Html.AntiForgeryToken()
      @Html.ValidationSummary(true)
      <div class="tab-content col-md-10">
        @EditorFor(m => m.Items, new { ItemList = ViewBag.ItemList })
      </div>
    }
    

    如果属性
    Type
    的值为
    日历“
    ,则在视图中选择第二个选项;如果属性
    的“电子邮件”
    ,则选择第三个选项;否则选择第一个(标签)选项将被选中。

    实际上它根本不起作用。您的
    foreach
    循环正在创建重复的
    id
    (无效的html)和
    name
    属性,因此当您发回时,不会有任何内容绑定到您的集合。因为您需要为您的模型创建一个自定义
    EditorTemplate
    ,如Om所示,实际上通过添加带有字符串的项目id为所有内容提供唯一id,因此所有id实际上都是唯一的OK,错过了这一点,但是它们有相同的名称,因此它们不会发回集合。根据链接使用
    EditorTemplate
    不仅可以使用索引器正确命名它们,还可以为它们提供唯一的id(因此无需使用html属性添加此项)然后根据属性的值选择正确的选项
    Type
    哦,太酷了。我来看看,谢谢。我还有一些javascript检查“更改的”事件-此解决方案是否适用-检查每个不同的下拉列表是否具有相同的类?它不起作用,它没有给我唯一的Id,下拉列表显示为文本框。这可能是因为我使用嵌套类吗?在我的控制器中,我得到一个ItemA列表,每个ItemA包含一个ItemB列表->editortemplate是对于ItemB-我的类不是通过给你唯一id的方式添加的(重复id是无效的html!)。如果它给你一个文本框,它就找不到
    EditorTemplate
    。你给它命名正确吗(见我回答的第3段-你还没有发布模型,所以我猜是
    模型。Items
    是一个类名
    Item
    )的集合,那么我是否仍然使用我的foreach(模型中的var Item)?否。事实上,如果使用循环,
    EditorFor()
    无法正常工作。那么我如何循环所有项目并将它们显示为不同的选项卡呢?现在我每次循环一个项目时都会创建一个选项卡-这就是为什么我一直在使用foreach-我的意思是,如果我不使用循环,代码如何知道生成多个选项卡?
    @using (Html.BeginForm())
    {
      @Html.AntiForgeryToken()
      @Html.ValidationSummary(true)
      <div class="tab-content col-md-10">
        @EditorFor(m => m.Items, new { ItemList = ViewBag.ItemList })
      </div>
    }
    
    <select name="Items[0].Type" id="Items_0__Type" class="typeselector">
    <select name="Items[1].Type" id="Items_1__Type" class="typeselector">