2015-05-18 9 views
0

Я пытаюсь сохранить данные, используя SelectListItem. Мне удалось отобразить данные, но я не могу придумать способ сохранить выбранный элемент в базе данных. Мои методы управления относятся:Сохраните данные из выпадающего списка, используя selectlist

public ActionResult Create() 
{ 
    ViewBag.ProposerID = new SelectList(db.Proposers, "ID", "ProposerName"); 

    List<SelectListItem> projectType = new List<SelectListItem>(); 
    projectType.Add(new SelectListItem { Text = "Development", Value = "1" }); 
    projectType.Add(new SelectListItem { Text = "Research", Value = "2" , Selected = true}); 
    projectType.Add(new SelectListItem { Text = "Hybrid", Value = "3" }); 
    projectType.Add(new SelectListItem { Text = "Other", Value = "4" }); 
    ViewBag.ProjectType = projectType; 
    return View(); 
} 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(
[Bind(Include = "ID,ProjectTitle,Description,ProposedDate,ProjectType,ProjectStatus,ProjectDifficulty,ProposerID")] Project project) 
{ 
    try { 
     if (ModelState.IsValid && ModelState != ModelState) 
     { 
      db.Projects.Add(project); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
    } 
    catch (Exception) 
    { 
     ViewBag.ErrorMessage = "Something went wrong!! Please try again."; 
     // Error message 
    } 
    ViewBag.ProposerID = new SelectList(db.Proposers, "ID", "ProposerName", project.ProposerID); 
    return View(project); 
} 

и мой Вид:

<div class="form-group"> 
    @Html.LabelFor(model => model.ProjectType, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownList("ProjectType", "") 
     @Html.ValidationMessageFor(model => model.ProjectType, "", new { @class = "text-danger" }) 
    </div> 
</div> 

мне удалось отобразить данные, но я запутался о том, как получить выбранный элемент и сохранить его.

Моя Модель:

public class Project 
{ 
    public int ID { get; set; } 
    [Required] 
    [DisplayName("Project Title")] 
    public string ProjectTitle { get; set; } 
    [Required] 
    [DataType(DataType.MultilineText)] 
    [DisplayName("Project Description")] 
    public string Description { get; set; } 
    [Required] 
    [DataType(DataType.Date)] 
    [DisplayName("Proposed Date")] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] 
    public DateTime ProposedDate { get; set; } 
    // Development or Research etc. 
    [Required] 
    [DisplayName("Project Type")] 
    public string ProjectType { get; set; } 
    // Project Is Taken or Not 
    [DisplayName("Project Status")] 
    public ProjectStatus ProjectStatus { get; set; } 
    [DisplayName("Project Difficulty")] 
    public ProjectDifficulty ProjectDifficulty { get; set; } 
    [ForeignKey("Proposer")] 
    public int ProposerID { get; set; } 
    public virtual Proposer Proposer { get; set; } 
} 
+0

где вы связать ViewBag.ProjectType с DropDownList в представлении? – Stuntman

+0

Да, я привязываю свой ViewBag.ProjectType в моем представлении как «ProjectType». –

+0

Выведенный код не связывает между ViewBag.Project и выпадающим списком «ProjectType». На ваш взгляд свяжите его таким образом @ Html.DropDownList («ProjectType», ViewBag.ProjectType как IEnumerable ). Затем в вашем методе действий проверьте параметр «ProjectType», и вы увидите выбранное значение – Stuntman

ответ

0

Прежде всего изменения вы ViewBag ключа, он отличается от названия модели собственности:

ViewBag.ProjectTypeOptions = projectType; 

и в вашем использовании вида DropDownListFor хелперов таким образом:

@Html.DropDownListFor(x=>x.ProjectType, new SelectList(ViewBag.ProjectTypeOptions,"Value","Text")) 

теперь вы получите сообщение об избранном предмете, размещенном в режиме l в ProjectType Недвижимость.

и ваша модель должна иметь свойство типа string не IEnumerable<SelectListItem>, как это:

public class Project 
{ 
    public string ProjectType { get;set;} 
    ............ 
    ............ 
} 
+0

Спасибо за помощь. Я попытался, как вы упомянули, но, я получаю эту ошибку. Элемент ViewData с ключом «ProjectType» имеет тип «System.String», но должен иметь тип «IEnumerable ». Ты знаешь почему? –

+0

Можете ли вы показать свою модель, отредактировав свой вопрос? –

+0

@HarshPanchal Я изменил свое сообщение Проверка обновленного сообщения –