0

次のコードがあります。

public class OrganisationController : Controller
        {
            //
            // GET: /Organisation/

            public ActionResult Update()
            {
                var fisherman = new RoleType {Id = 1, Name = "Fisherman"};
                var manager = new RoleType {Id = 2, Name = "Manager"};
                var deckhand = new RoleType {Id = 3, Name = "Deckhand"};

                var roleTypes = new List<RoleType>
                    {
                        fisherman, manager, deckhand
                    };

                ViewBag.Roles = new SelectList(roleTypes, "Id", "Name");

                return View(
                    new Organisation
                        {
                            Name = "Fish Co.",
                            People = new List<Person>
                            {
                                new Person
                                {
                                    Name = "Squid",
                                    RoleType = fisherman
                                },
                                new Person
                                {
                                    Name = "Michael",
                                    RoleType = manager
                                },
                                new Person
                                {
                                    Name = "John",
                                    RoleType = deckhand
                                }
                            }
                        });
            }

            [HttpPost]
            public ActionResult Update(Organisation org)
            {
                return View();
            }

        }

    public class Organisation
        {
            public string Name { get; set; }
            public IList<Person> People { get; set; }
        }

public class Person
    {
        public string Name { get; set; }
        public RoleType RoleType { get; set; }
    }

public class RoleType
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

Update.cshtml 内

 @model Models.Organisation

    <form action="" method="post" enctype="multipart/form-data">
        @Html.EditorFor(x => x.Name)
        @Html.EditorFor(x => x.People)
        <input type="submit"/>
    </form>

EditorTemplates Person.cshtml で:

@model Models.Person

@Html.EditorFor(x => x.Name)
@if(Model != null)
{
    @Html.DropDownListFor( x => x.RoleType.Id, (SelectList)ViewBag.Roles)
}

組織名、人の名前、およびその役割を更新できるページにアクセスできることを期待していました。問題は、選択したアイテムをドロップダウンに設定できないことです。私x => x.RoleType.Idは私のためにこれをするだろうと思った。

これを機能させる方法を知っている人はいますか?

4

1 に答える 1

1

このコンストラクターを試してください: SelectList コンストラクター (IEnumerable, String, String, Object)

public SelectList(
    IEnumerable items,
    string dataValueField,
    string dataTextField,
    Object selectedValue
)

このようなもの:

@Html.DropDownListFor( x => x.RoleType.Id, new SelectList((List<RoleType>)ViewBag.Roles, "Id", "Name", Model.RoleType.Id))
于 2013-04-27T08:34:38.160 に答える