【问题标题】:Binding Selected Value in DropDownListFor with-in for statement在 for 语句中绑定 DropDownListFor 中的选定值
【发布时间】:2014-10-22 10:49:32
【问题描述】:

我有一个允许同时编辑多个地址项的视图。文本框的绑定工作正常,但下拉列表无法识别所选值。

我的 ViewModel 是:

public class AddressesViewModel
{
    public List<AddressViewModel> Addresses { get; set; }
}

public class AddressViewModel
{
    public string Street { get; set; }
    public string StateSelected { get; set; }
    public IEnumerable<SelectListItem> States { get; set; }

    public AddressViewModel()
    {
        this.States = new List<SelectListItem> { 
            new SelectListItem(),
            new SelectListItem { Text = "New Jersey", Value = "NJ"}, 
            new SelectListItem { Text = "New York", Value = "NY"}, 
            new SelectListItem { Text = "Pennsylvania", Value = "PA" },
            new SelectListItem { Text = "Rhode Island", Value = "RI" }
        };
    }
}

我的控制器操作是:

public ActionResult Index()
{
    var addressesViewModel = new AddressesViewModel();
    addressesViewModel.Addresses = new List<AddressViewModel>() { 
        new AddressViewModel{
            Street = "some road", 
            StateSelected = "PA"
        },
        new AddressViewModel{
            Street = "some other road", 
            StateSelected = "NJ"
        }
   };

   return View(addressesViewModel);
}

我的看法是:

@model HelloWorld.Models.AddressesViewModel


@for (int i = 0; i < Model.Addresses.Count(); i++)
{
    <div class="editor-label">
        @Html.LabelFor(modelItem => Model.Addresses[i].Street)
    </div>
    <div class="editor-field">
        @Html.EditorFor(modelItem => Model.Addresses[i].Street)
    </div>

    <div class="editor-label">
        @Html.LabelFor(modelItem => Model.Addresses[i].StateSelected)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(modelItem => Model.Addresses[i].StateSelected, Model.Addresses[i].States)
    </div>
}

我使用单个项目(绑定到 AddressViewModel)测试了视图,它运行良好。

【问题讨论】:

标签: c# asp.net-mvc razor html.dropdownlistfor


【解决方案1】:

在评论中链接的帮助下,我最终为每个控制器添加了一个:

public ActionResult Index()
{
    var addressesViewModel = new AddressesViewModel();
    addressesViewModel.Addresses = new List<AddressViewModel>() { 
        new AddressViewModel{
            Street = "some road", 
            StateSelected = "PA"
        },
        new AddressViewModel{
            Street = "some other road", 
            StateSelected = "NJ"
        }
   };

        foreach (var item in addressesViewModel.Addresses)
        {
            if (item.StateSelected != null)
            {
                item.States.First(x => x.Value == item.StateSelected).Selected = true;
            }
        }

   return View(addressesViewModel);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多