ASP.Net MVC2 DropDownListFor - PullRequest
       6

ASP.Net MVC2 DropDownListFor

6 голосов
/ 01 мая 2010

Я пытаюсь изучить MVC2, C # и Linq для всех сущностей в одном проекте (да, я безумен), и у меня возникают некоторые проблемы с DropDownListFor и передачей ему SelectList.

Это код в моем контроллере:

public ActionResult Create()
{
    var Methods = te.Methods.Select(a => a);

    List<SelectListItem> MethodList = new List<SelectListItem>();

    foreach (Method me in Methods)
    { 
        SelectListItem sli=new SelectListItem();
        sli.Text = me.Description;
        sli.Value = me.method_id.ToString();
        MethodList.Add(sli);
    }

    ViewData["MethodList"] = MethodList.AsEnumerable();

    Talkback tb = new Talkback();
    return View(tb);
} 

и у меня проблемы с попыткой заставить DropDownListFor взять MethodList в ViewData. Когда я пытаюсь:

<%:Html.DropDownListFor(model => model.method_id,new SelectList("MethodList","method_id","Description",Model.method_id)) %>

Ошибка со следующим сообщением

DataBinding: 'System.Char' does not contain a property with the name 'method_id'.

Я знаю, почему это так, поскольку он принимает MethodList в качестве строки, но я не могу понять, как заставить его взять SelectList. Если я делаю следующее с нормальным DropDownList:

<%: Html.DropDownList("MethodList") %>

Это вполне устраивает.

Может кто-нибудь помочь?

1 Ответ

8 голосов
/ 01 мая 2010

РЕДАКТИРОВАТЬ : То есть вы используете Entity Framework, да? В этом случае с информацией о добавлении, которую вы указали в комментариях, вы захотите сделать что-то вроде этого:

public ActionResult Create()
{
    var viewModel = new CreateViewModel(); // Strongly Typed View

    using(Entities dataModel = new Entities()) // 'te' I assume is your data model
    {
         viewModel.Methods = dataModel.Methods.Select(x => new SelectListItem()
         {
              Text = x.Description,
              Value = x.method_id.ToString()
         });
    }

    return View(viewModel);
}

Ваша строго типизированная модель вида будет:

public class CreateViewModel
{
     public string SelectedMethod { get; set; }
     public IEnumerable<SelectListItem> Methods { get; set; }
}

Ваш код просмотра будет:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CreateViewModel>" %>
 <%-- Note the Generic Type Argument to View Page! --%>
 <%: Html.DropDownListFor(m => m.SelectedMethod, Model.Methods) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...