2015-06-30 2 views
0

Я до сих пор новичок в MVC и работаю над этим. Мне нужно, чтобы столбец «имя» моей таблицы округов был включен в выпадающий список, чтобы иметь возможность выбирать из разных районов. Конечная игра заключается в том, что пользователь выберет округ из выпадающего списка, а затем будет направлен на страницу, где список школ (в другой таблице) будет показан с выбранным округом (я думаю, что это будет запрос в базе данных используя значение, указанное в выпадающем списке). В основном, что я сделал до сих пор:Заполнение DropDownList из базы данных Azure в MVC

  • Создайте приложение MVC.

  • Создание модели структуры сущности.

  • Создайте пустой контроллер.

  • Создать модель представления (поскольку каждый учебник/сайт ответ сказал, чтобы сделать так)

  • Создать представление.

реплицировать шаг за шагом, что эти учебники говорят мне делать, но я получить другой результат. Мой DropDownList дает мне этот результат:

Мне нужно помочь разобраться, что может быть не так, и почему данные не отображаются в моем DropDownList.

ответ

2

Полагаю, что вы используете неправильный конструктор SelectList. Предполагая, что вы хотите, значение выпадающего списка, чтобы быть собственностью «LEAID»

@Html.DropDownList("myList", new SelectList(ViewBag.districts, "leaId", "name") 

Я бы, однако, подойти к нему еще один способ, который будет держать его в основном сильно типизированных:

public class DistrictViewModel 
{ 
    public string SelectedDistrictId { get; set; } 

    public IEnumerable<SelectListItem> Districts { get; set; } 
} 

Действие:

public ActionResult Index() 
{ 
    var viewModel = new DistrictViewModel() 
    { 
     Districts = new SelectList(db.Districts.ToList(), "leaID", "name") 
    } 
    return View(viewModel); 
} 

cshtml:

@model DistrictViewModel 

@Html.DropDownListFor(m => m.SelectedDistrictId, Model.Districts) 
+1

должен быть '@ Html.DropDownList ("MyList", новый SelectList (ViewBag.districts, "LEAID", "имя", _ defaultvalue_)' вместо с DefaultValue как необязательно – Seichi

+0

Я пробовал использовать ваш код, и он дал мне все leaID, поэтому я понял, что бы произошло, если бы я сделал «ViewBag.districts», «name», «name», и это странно сработало! –

+0

@Seichi после выяснения этого, я обновился, чтобы увидеть ваш комментарий. Поэтому я изменил его на вашу версию, и он отлично работает! –

0

Вот мой ответ на ваш комментарий, используя Ajax

//Model 
public class DistrictViewModel 
{ 
    public string name {get;set;} 
    public SelectList District {get;set;} 
    public int SelectedDistrict {get;set} 
} 


//Controller 
public class DistrictController : Controller 
{ 
KUDEREntities db = new KUDEREntities(); 

public ActionResult Index() 
{ 
    var model = new DistrictViewModel(); 
    model.Districts = db.Districts.ToList(); 
    model.SelectedDistrict=0; 
    return view(model); 
} 

[HttpPost] 
public ActionResult Search(int id) 
{ 
    //do the search with the id of the selected district 
    var data = db.Districts.Where(m=>m.leaId = id).FirstorDefault();//this would return the whole object. 
    return Json(data, JsonRequestBehavior.AllowGet); 
} 
} 




//Index View 
@Model DistrictViewModel 

<div> 
//with this your selector would be "#SelectedDistrict" 
@Html.DropDownListFor(model=>model.SelectedDistrict, new SelectList(Model.Districts,"leaId","name",Model.SelectedDistrict), new {@class=""}) 

//with this your selector would be "#myList" 
//@Html.DropDownList("myList", new SelectList(ViewBag.districts, "leaId", "name", Model.SelectedDistrict) 
</div> 
<script> 
$(document).ready(function(){ 
//when you want to search for the id selected, you just need to call the Search function below 
function Search() { 
    //... now you have the value of the selecteditem 
    var parameters = { id: $("#SelectedDistrict").val() }; 
    $.ajax({ 
     type: 'post', 
     url: '@Url.Action("Search", "District")', 
     cache: false, 
     contentType: "application/json; charset=utf-8", 
     dataType: "html", 
     async: true, 
     data: JSON.stringify(parameters), 
     success: function (data) { 
      //...do whatever with the data 
     }, 
     failure: function (msg) { 
      //... show a message of error 
     } 
    }); 
} 
}); 
</script> 
+0

Он не любит эту строку: 'model.Districts = db.Districts.ToList();' ошибка: 'не может неявно преобразовать тип«System.Collections.Generic.List to System.Web.Mvc.SelectList' –

+0

попробуйте сделать что-то вроде этой 'model.Districts = new SelectList ( db.Districts.AsEnumerable()," leaID "," name ");' – Seichi

+0

хорошо, поэтому исправлена ​​эта проблема , но тогда это ошибка для этой линии: модели '=> model.SelectedDistrict' ошибка: ' выражение дерево не может содержать динамический expression' который, похоже, первоначальный ответ - единственный, который работает до сих пор, есть ли большая разница между начальными и измененными ответами, за исключением того, что theres no viewbag? Я искал ошибку, но я не получаю много. –

Смежные вопросы