Luis Valencia
Luis Valencia

Reputation: 33978

How to get the values from Html.ListBox in asp.net MVC

I had this before

<div class="form-group">
    @Html.Label("Empresa", new { @class = "control-label col-md-2" })
    <div class="col-md-10">
       @Html.DropDownList("Empresa", 
         new SelectList(empresas, "Id", "Nombre"), 
         new { @class = "form-control" })
     </div>
</div>

and on my controller I could get the values: (check the request.form line)

      public async Task<ActionResult> Create(
        [Bind(
            Include =
                "UserPrincipalName,AccountEnabled,PasswordProfile,MailNickname,DisplayName,GivenName,Surname,JobTitle,Department"
            )] Microsoft.Azure.ActiveDirectory.GraphClient.User user)
    {
        ActiveDirectoryClient client = null;
        try
        {
            client = AuthenticationHelper.GetActiveDirectoryClient();
        }
        catch (Exception e)
        {
            if (Request.QueryString["reauth"] == "True")
            {
                //
                // Send an OpenID Connect sign-in request to get a new set of tokens.
                // If the user still has a valid session with Azure AD, they will not be prompted for their credentials.
                // The OpenID Connect middleware will return to this controller after the sign-in response has been handled.
                //
                HttpContext.GetOwinContext()
                    .Authentication.Challenge(OpenIdConnectAuthenticationDefaults.AuthenticationType);
            }

            //
            // The user needs to re-authorize.  Show them a message to that effect.
            //
            ViewBag.ErrorMessage = "AuthorizationRequired";
            return View();
        }

        try
        {
            var usuario = user.UserPrincipalName;
            user.UserPrincipalName = usuario+SettingsHelper.Domain;
            user.MailNickname = usuario;
            user.AccountEnabled = true;
            await client.Users.AddUserAsync(user);

            string extPropLookupName = string.Format("extension_{0}_{1}", SettingsHelper.ClientId.Replace("-", ""), "Compania");

            //TO BE FINISHED
            user.SetExtendedProperty(extPropLookupName, Request.Form["Empresa"].ToString());
            await user.UpdateAsync();
            //Task.WaitAll();

            // Save the extended property value to Azure AD.
            user.GetContext().SaveChanges();
            return RedirectToAction("Index");
        }
        catch (Exception exception)
        {
            ModelState.AddModelError("", exception.Message);
            return View();
        }
    }

However I changed DropDownList with ListBox because I need it to be multipleselect, and now I dont see it in the Request.Form collection

How can I get the values selected?

Upvotes: 1

Views: 2062

Answers (1)

rtharris619
rtharris619

Reputation: 46

Use FormCollection like they have it here.

Like so:

public ActionResult MyAction(FormCollection formCollection)
{
    var addedItems = formCollection["Empresa"].Split(',');

    //....more code that does stuff with the items
}

Upvotes: 1

Related Questions