2010-04-07 4 views
-1

я хочу сделать следующее:падение вниз списка в MVC

1: Добавить два выпадающий список в register.aspx [Say ddlRole, ddlGender]

2: Заполните выпадающий список [ddlRole должен быть заполненный из базы данных, а ddlRole должен иметь два статических поля]

3: На отправке Я хочу получить выбранное значение из двух выпадающих списков.

Пожалуйста, помогите.

Заранее спасибо.

+0

ОК, так что же вы попробовали? и как все прошло? –

+0

Да, Махеш, я пробовал это, и я не смог сделать это полностью. и это единственная причина, по которой я опубликовал этот вопрос здесь. Еще раз спасибо за ваш ответ. Я получил ответ от Андрея и Скотту. – Zerotoinfinity

ответ

7

Ну, ваш вопрос вроде как «Можете ли вы рассказать мне, как построить шаттл?». Но я попытаюсь показать вам небольшой пример, который поможет вам (я очень надеюсь)

Прежде всего, если вы хотите получить раскрывающееся меню на странице, вам необходимо создать его.

С точки зрения MVC вам необходимо создать представление. Это мнение MVC стиль страницы ASPX

Ниже приводится пример:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 
<h2>Register</h2> 

Это обычная пустая страница.

Давайте наполним его выпадающими списками.

<h2>Register</h2> 
<%= Html.DropDownList("ddlRole") %> 
<%= Html.DropDownList("ddlGender") %> 

Хорошо. Теперь пришло время заставить систему показать наш вид. Для этого нам нужен мотор. С точки зрения MVC он вызывает контроллер.

Создайте класс с методом:

public class SetupController : Controller 
{ 
     public ActionResult Register() 
     { 
      return View(); 
     } 
} 

Если вы сейчас попытаетесь запустить страницу, которую вы должны увидеть две выпадающие. К сожалению, они будут пустыми. Очевидно, что они пустые, потому что вы не сказали, как их заполнять.

Основная цель контроллеров - подключить модель, содержащую все данные, которые необходимо обработать и показать с видом. Другими словами, контроллер берет данные из модели (M), подготавливает их и отправляет в View (V).

Итак, прежде всего нам нужно настроить наш контроллер, чтобы он отображал информацию о содержании для выпадающих списков. Самый простой способ заключается в использовании коллекции ViewData:

public ActionResult Register() 
     { 
      ViewData["ddlRole"] = new[] { 
              new SelectListItem() {Text = "Customer", Value = "Customer"}, 
              new SelectListItem() {Text = "Supervisor", Value = "Supervisor"}, 
              new SelectListItem() {Text = "Admin", Value = "Admin"}, 
             }; 
      ViewData["ddlGender"] = new[]{ 
              new SelectListItem() {Text = "Male", Value = "Male"}, 
              new SelectListItem() {Text = "Female", Value = "Female"} 
             }; 
      return View(); 
     } 

Как вы можете видеть из этого примера я создал контент для выпадающие динамически. В вашем случае вы можете использовать свою базу данных для заполнения выпадающих списков по своему усмотрению.

Если вы попытаетесь открыть свою страницу сейчас, вы увидите, что ваши выпадающие списки заполнены данными прямо сейчас!

Отлично!

Если вы спросите, как представление знает, какой контент использовать для выпадающего списка, я отвечу, что MVC использует множество соглашений.Одно из этих соглашений состоит в том, что когда представление генерирует свои элементы управления, он ищет контент для этого элемента управления ключом, который равен имени элемента управления (т. Е. «DdlRole», «ddlGender») Поскольку вы ставите значения для этого элемента управления ключи к ViewData, это просто для MVC, чтобы заполнить ваши выпадающие меню текстом!

Прохладный!

Идти вперед.

Теперь нам нужно собрать данные со страницы и отправить ее обратно на сервер.

Что нам нужно для этого?

Конечно, в первую очередь нам нужна кнопка отправки:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 


    <h2>Register</h2> 
    <%= Html.DropDownList("ddlRole") %> 
    <%= Html.DropDownList("ddlGender") %> 

    <input type="submit" value="Register Me" /> 

Открыть страницу в broser снова. Прохладный! У нас есть кнопка, но, если мы попытаемся щелкнуть по ней, ничего не произойдет.

Если вы думаете, с точки зрения классического ASP.NET, вы скажете, что мы забыли назначить событие на кнопку отправки, писать CodeBehind код и бла ... bla..bla ...

В MVC это немного другое. Нам просто нужно отправить контент на сервер. Чтобы сделать это, как правило, вы должны иметь «форму» тег на странице:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<% using (Html.BeginForm("DoRegister", null)) { %> 
<h2>Register</h2> 
    <%= Html.DropDownList("ddlRole") %> 
    <%= Html.DropDownList("ddlGender") %> 
    <input type="submit" value="Register Me" /> 
<% } %> 

Это используя блок кода будет просто обернуть наши метки с началом и концом тегов «формы». Это позволяет браузеру собирать информацию со всех входов внутри формы (в нашем случае это наши dropdows) и отправлять их обратно с того места, где они были открыты.

Попробуйте открыть его в браузере и нажмите кнопку

К сожалению, мы получили исключение. Причина этого в том, что мы забыли правила. Что мы намеревались сделать? Мы хотим отправить данные в нашу бизнес-модель. Кто должен нести ответственность за это? Конечно, она должна быть контроллер (C), так как его главный и единственный разъем между Model (M) и View (V)

Давайте добавим новое действие, к тому же контроллеру:

public ActionResult DoRegister(string ddlRole, string ddlGender) 
    { 
     ////store our ddlRole and ddlGender in the database 
     /// ...... 
     /// ..... 

     return RedirectToAction("Welcome"); 
    } 

В этом например, он перенаправляется на действие «Добро пожаловать» после завершения регистрации.

Чтобы закончить пример и избежать ошибок, мы должны реализовать Приветственное действие и вид:

Добавьте к этому контроллеру:

public ActionResult Welcome() 
    { 
     return View(); 
    } 

И создать новый вид для приветствия действия (правая кнопка мыши на «Добро пожаловать» код и выберите «Добавить вид ...»):

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<h2>Welcome!</h2> 

Теперь вы увидите, что после нажатия кнопки она покажет вам результат приветствия выполнения действия - Welc ome страница.

Последняя уловка - присылаем выбранные выпадающие значения на страницу приветствия.

Для этого сначала необходимо сохранить эти значения где-то в тот момент, когда мы получили его с сервера. В вашем случае вы можете использовать базу данных, но, чтобы сделать его проще, я буду использовать специальную коллекцию TempData:

public ActionResult DoRegister(string ddlRole, string ddlGender) 
     { 
      ////store our ddlRole and ddlGender in the database 
      /// ...... 
      /// ..... 

      TempData["SelectedRole"] = ddlRole; 
      TempData["SelectedGender"] = ddlGender; 

      return RedirectToAction("Welcome"); 
     } 

Далее, пусть делают нашу страницу приветствия, чтобы показать значения из коллекции TempData:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<h2>Welcome you, the <%= TempData["SelectedRole"]%> of <%= TempData["SelectedGender"] %>!</h2> 

Запустите его! Вы видите значения? Да, ты сделал это!

Простой и легкий.

Я надеюсь, что эта статья поможет вам понять, насколько велик ASP.NET MVC. Но вышеприведенный код - это просто верх айсберга. На самом деле MVC МНОГО БОЛЬШЕ МНОГО больше удовольствия, чем это.

Если вам интересно узнать больше об этом, я бы рекомендовал вам прочитать APress «ASP.NET MVC Framework» Стивена Сандерсона. Действительно отличная книга, в которой есть все, чтобы начать писать свои собственные MVC-приложения на MVC.

Удачи!

+3

Замечательный объем работы для вопроса «сделайте мою домашнюю работу для меня/отправьте мне кодз». – Webjedi

+1

Я согласен, но это было весело. Я действительно хочу, чтобы люди знали больше о MVC –

+0

Это отлично, мне очень помогли. В то же время я проверяю блоги Scottgu. Спасибо, Андрей. :) – Zerotoinfinity