MVC5 Razor, html.dropdownlistfor ausgewählt, wenn der Wert im array

Entwickle ich eine ASP.NET MVC 5-Anwendung mit C# und .NET Framework 4.6.1.

Habe ich diese View:

@model MyProject.Web.API.Models.AggregationLevelConfViewModel

[...]

@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, (SelectList)Model.HelperCodeTypeItems, new { id = "Configurations[0].HelperCodeType" })

Den ViewModel ist:

public class AggregationLevelConfViewModel
{
    private readonly List<GenericIdNameType> codeTypes;
    private readonly List<GenericIdNameType> helperCodeTypes;

    public IEnumerable<SelectListItem> CodeTypeItems
    {
        get { return new SelectList(codeTypes, "Id", "Name"); }
    }

    public IEnumerable<SelectListItem> HelperCodeTypeItems
    {
        get { return new SelectList(helperCodeTypes, "Id", "Name"); }
    }

    public int ProductionOrderId { get; set; }

    public string ProductionOrderName { get; set; }

    public IList<Models.AggregationLevelConfiguration> Configurations { get; set; }

    public AggregationLevelConfViewModel()
    {
        //Load CodeTypes to show it as a DropDownList
        byte[] values = (byte[])Enum.GetValues(typeof(CodeTypes));

        codeTypes = new List<GenericIdNameType>();
        helperCodeTypes = new List<GenericIdNameType>();

        for (int i = 0; i < values.Length; i++)
        {
            GenericIdNameType cType = new GenericIdNameType()
            {
                Id = values[i].ToString(),
                Name = EnumHelper.GetDescription((CodeTypes)values[i])
            };

            if (((CodeTypes)values[i]) != CodeTypes.NotUsed)
                codeTypes.Add(cType);

            helperCodeTypes.Add(cType);
        }
    }
}

Sowie Models.AggregationLevelConfiguration ist:

public class AggregationLevelConfiguration
{
    public byte AggregationLevelConfigurationId { get; set; }
    public int ProductionOrderId { get; set; }
    public string Name { get; set; }
    public byte CodeType { get; set; }
    public byte HelperCodeType { get; set; }
    public int PkgRatio { get; set; }
    public int RemainingCodes { get; set; }
}

Ich brauche, um ausgewählten Wert in diesen Eigenschaften:

public IEnumerable<SelectListItem> CodeTypeItems
{
    get { return new SelectList(codeTypes, "Id", "Name"); }
}

public IEnumerable<SelectListItem> HelperCodeTypeItems
{
    get { return new SelectList(helperCodeTypes, "Id", "Name"); }
}

Aber ich kann nicht legen Sie es in new SelectList(codeTypes, "Id", "Name"); oder new SelectList(helperCodeTypes, "Id", "Name"); weil der ausgewählte Wert in Configurations Arrays: Felder AggregationLevelConfiguration.CodeType und AggregationLevelConfiguration.HelperCodeType.

Ich glaube, ich habe zum einstellen ausgewählten Wert in der Ansicht, aber ich weiß nicht, wie es zu tun.

Wie kann ich die ausgewählten Werte?

Seine eine unglückliche Einschränkung der Verwendung von DropDownListFor() in einer Schleife. Sie brauchen, um einen neuen zu generieren MutliSelectList in jeder iteration (Einstellung der selectedValues Eigenschaft im Konstruktor), oder (besser), verwenden Sie eine EditorTemplate für typeof AggregationLevelConfiguration und übergeben Sie die SelectList der Vorlage AdditionalViewData
Danke. Ich habe verstanden, dass ich die Dinge, aber ich weiß nicht, wie Sie zu verwenden sind.
Ich versuche eine Antwort zu finden, gab ich vor etwa 6 Monaten mit dem code für beide Optionen, aber ohne Glück. Wenn ich Sie nicht finden kann, werde ich eine Antwort in einer Stunde oder so - aber das folgende sollte funktionieren - @Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.HelperCodeTypeItems, "Value", "Text", Model.Configurations[0].HelperCodeType, new { ... })
Ich arbeite an einer Lösung mit jQuery, um die option auszuwählen.
Ja, das funktioniert. Danke.

InformationsquelleAutor VansFannel | 2016-05-24

Schreibe einen Kommentar