user5710892
user5710892

Reputation:

DropDownListFor in MVC 4

I am having a hard time to show dropdownlist for in the view, the values will be populated from database. I am using MS SQL Server as the database.

I want to show a drop down list in ApplyingFor which will be populated from database.

Please help me out. This is the Model

public class CandidateProfile
{
        [Display(Name = "Candidate Name")]
        [Required(ErrorMessage = "Provide a Name", AllowEmptyStrings=false)]
        [DataType(DataType.Text)]
        public string CandidateName { get; set; }

        [Required(ErrorMessage = "Provide Your Address",AllowEmptyStrings = false)]
        [Display(Name = "Address")]
        [DataType(DataType.MultilineText)]
        public string Address { get; set; }

        [Display(Name = "Phone Number")]
        [Required(ErrorMessage = "Provide a Phone Number")]
        [RegularExpression("^([07][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | 8[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] | 9[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])$", ErrorMessage = "Enter Valid Mobile Number")]
        public string PhoneNumber { get; set; }

        [Display (Name = "Email-Id")]
        [Required(ErrorMessage="Provide an email-id")]
        [EmailValidator]
        public string EmailId { get; set; }

        [Display (Name = "Applying For")]
        public string **ApplyingFor** { get; set; }

        [Display (Name = "Experience")]
        [Required(ErrorMessage = "")]
        public int Experience { get; set; }

        [Display (Name = "Present Location")]
        [Required(ErrorMessage = "")]
        public string PresentLocation { get; set; }
}



 public class ApplyingPositions
 {
     public IEnumerable<ApplyingPositions> ApplyingPosition { get; set; }
 }
 public class ApplyingPosition
 {
     public int APId { get; set; }
     public string Designation { get; set; }
 }

This is the View:

@model Recruitment.Models.CandidateProfile

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>CandidateProfile</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.CandidateName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CandidateName)
            @Html.ValidationMessageFor(model => model.CandidateName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Address)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Address)
            @Html.ValidationMessageFor(model => model.Address)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.PhoneNumber)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PhoneNumber)
            @Html.ValidationMessageFor(model => model.PhoneNumber)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.EmailId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.EmailId)
            @Html.ValidationMessageFor(model => model.EmailId)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.ApplyingFor)
        <div class="editor-field">
            @Html.EditorFor(model => model.ApplyingFor)
            @Html.ValidationMessageFor(model => model.ApplyingFor)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Experience)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Experience)
            @Html.ValidationMessageFor(model => model.Experience)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.PresentLocation)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PresentLocation)
            @Html.ValidationMessageFor(model => model.PresentLocation)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Upvotes: 0

Views: 87

Answers (3)

Manoz
Manoz

Reputation: 6587

First- 1) You need to create the source for dropdown as-

var listForApplyingFor= db.Table.Select(o=> new SelectListItem{
    Value=o.ID,
    Text= o.Text
}).ToList();

ViewBag.ItemsApplyingFor= listForApplyingFor

.Cshtml View-

@Html.DropdownListFor(m=>m.ApplyingFor, new SelectList(ViewBag.ItemsApplyingFor,"Value","Text"),"Select...", htmlAttributes:new{ })

Let me know if it helps.

Upvotes: 0

Sahi
Sahi

Reputation: 1484

populate lstApplyingFor (list) form your DB. and in your controller

ViewBag.ApplyingFor = new SelectList(lstApplyingFor, "Id", "Name");

and in view:-

@Html.DropDownList(m => m.ApplyingFor,"ApplyingFor", "--Select--")

Upvotes: 0

adiga
adiga

Reputation: 35202

You need to pass the List of Options from your controller to view. So, before returning View

var listOfPositions = new List<ApplyingPosition>();

listOfPositions = //Call the service to populate the listOfPositions from Database here

ViewBag.PositionsList = new SelectList(listOfPositions, "APId", "Designation");

In your view instead of @Html.EditorFor(model => model.ApplyingFor)

 @Html.DropDownListFor(m => m.ApplyingFor, (SelectList)ViewBag.PositionsList, "Select")

Upvotes: 1

Related Questions