How to set default value to select list in MVC during run time

前端 未结 2 620
北荒
北荒 2020-12-02 01:07

I have view in which it loop through the model and display the details in editable mode. One of the model value is from a select list like below

@if (Model !         


        
相关标签:
2条回答
  • 2020-12-02 01:46

    Unfortunately @Html.DropDownListFor() behaves a little differently than other helpers when rendering controls in a loop. This has been previously reported as an issue on CodePlex (not sure if its a bug or just a limitation)

    Create a custom EditorTemplate for the type in the collection.

    In /Views/Shared/EditorTemplates/provider_service_dtls.cshtml (note the name must match the name of the type)

    @model yourAssembly.provider_service_dtls
    
    @Html.HiddenFor(m => m.service_id)
    @Html.DropDownListFor(m => m.activity_code_type, (SelectList)ViewData["options"], "--- Select Activity Code Type ---")
    .... // html helpers for other properties of provider_service_dtls
    

    and then in the main view, pass the SelectList to the EditorTemplate as additionalViewData

    @model yourAssembly.provider_preapproval 
    
    @using (Html.BeginForm())
    {
      .... // html helpers for other properties of provider_preapproval
    
      @Html.EditorFor(m => m.provider_service_dtls, new { options = (SelectList)@ViewBag.activity_code_type })
      ...
    

    The EditorFor() methods accepts IEnumerable<T> and will generate the controls for each item in the collection

    Edit

    An alternative is to create a new SelectList in each iteration of the for loop, where you need to set the Selected property of SelectList. This means that your ViewBag property must be IEnumerable<T>, not a SelectList, for example in the controller

    ViewBag.ActivityCodeTypeList = new[]
    {
      new { ID = 1, Name = "Internal" },
      new { ID = 2, Name = "Standard" }
    }
    

    and in the view

    for (int i = 0; i < Model.provider_service_dtls.Count; i++)
    {
      @Html.DropDownListFor(m => m => m.provider_service_dtls[i].activity_code_type,
        new SelectList(ViewBag.ActivityCodeTypeList, "ID", "Name", Model.provider_service_dtls[i].activity_code_type),
        "--- Select Activity Code Type ---")
    }
    
    0 讨论(0)
  • 2020-12-02 01:50

    Simply you can try this by using IEnumerable Model type list like

     @Html.DropDownList("ReceiverID", (IEnumerable<SelectListItem>)(m => m.activity_code_type), "--- Select ---", new { @class ="form-control" }) 
    

    Hope it will work

    0 讨论(0)
提交回复
热议问题