Как передать несколько выбранных значений Html.DropDownList из представления (.aspx) в действие контроллера MVC?

Мне нужно передать несколько данных (возможно, 2 выбранных значения Html.DropDownList) в метод действия контроллера MVC из представления MVC (.aspx). Думаю, это было бы из какой-то формы Html.Hidden, но как?

Я не могу получить выбранное значение из Html.DropDownList и передать его как Html.Hidden ("paramName", MvcStringSelectedValue) в действие контроллера.

Мой код:

        based on<br />

        <%: Html.DropDownList("Semester")%>
        <%= Html.Hidden("strSemesterToBaseOn",returnedValueFromAbove)%>

        <%: Html.ValidationSummary(true) %>           
        <input type="submit" value="Clone" />

    <% } %>
<br/><br/>

Мне нужно писать тег ввода "submitt" 2 раза или только один раз?

Изменить (ДОПОЛНИТЕЛЬНЫЙ КОД)

Метод действия контроллера:

[HttpPost]
public ActionResult CloneSemesterData(string strSemesterToOrganize, string strSemesterToBaseOn)
{

     .............................................................
     ..............................      
}

ЗДЕСЬ (другой метод контроллера) ВЫПАДАЮЩИЙ СПИСОК, заполненный значениями семестра.

   public ActionResult DepartmentAdministration()
   {
      // Get list of semesters
      var lr = new ListRepository();
      ViewData["Semester"] = new SelectList(lr.ListSemester(3));  //this ListSemester(3) will generate the list with 3 strings ( e.g "WS 2012", "SS2010")

      return View();
   }

Мой код просмотра в файле .aspx:

// это выполняется, когда выбрано radioButton = "Clone"

    <% using (Html.BeginForm("CloneSemesterData", "CourseNeededHours")) 
    {%>
        <%= Html.DropDownList("Semester")%> // this is First drop down list box , from which selected value , I want to transfer as 1st parameter of controller's action method

        <%: Html.ValidationSummary(true) %>           

        based On 

        <%= Html.DropDownList("Semester")%> //this is Second drop down list box, from which selected value, I want to transfer as 2nd parameter of controller's action method.
          <input type="submit" value="Clone" />

    <% } %>

ОШИБКА:

Теперь, после исправления с помощью Edit 2: он показывает красные линии под

поскольку он каким-то образом не распознает ViewData ["SemesterList"] ...

"System.Web.Mvc.HtmlHelper не содержит определения" DropDownList "и перегруженного лучшего метода расширения" System.Web.Mvc.Html.SelectExtensions.DropDownList (System.Web.Mvc.HtmlHelper, string, System .Collections.Generic.IEnumerable ') содержит недопустимые аргументы ".

Надеюсь, теперь это прояснится, по-прежнему двусмысленность, дайте мне знать тогда.

С уважением Усмань


person Usman    schedule 08.04.2012    source источник
comment
Пожалуйста, опубликуйте действие вашего контроллера, которое вам нужно вызвать после нажатия кнопки Submit и контроллера, который заполняет ваши DropDownLists ... с этим мы можем видеть и исправлять то, что вы делаете;)   -  person Romias    schedule 09.04.2012


Ответы (2)


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

Обычно у вас получается что-то вроде этого:

<%= Html.DropDownList("SemesterToOrganize", GetSemesterToOrganize()) %>
<%= Html.DropDownList("SemesterToBaseOn", GetSemesterToBaseOn()) %>

И в вашем контроллере:

[HttpPost]
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn) {
    // your code.
}

РЕДАКТИРОВАТЬ:

На основании того, что вы нам сказали. Вы полагаетесь на поведение MVC при заполнении DropDownList, потому что вы добавляете свой список в ViewData с тем же именем, что и ваш раскрывающийся список. Это не сработает для вас. Вам нужно будет заполнить каждый раскрывающийся список отдельно.

В вашем контроллере сделайте что-то вроде этого:

public ActionResult MyAction ()
{
    ViewData["SemesterList"] = // list of semesters

    return View();
}

Тогда, на ваш взгляд, у вас есть:

<%= Html.DropDownList("SemesterToOrganize", ViewData["SemesterList"]) %> 
<%= Html.DropDownList("SemesterToBaseOn", ViewData["SemesterList"]) %> 

тогда ваш метод публикации

[HttpPost] 
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn) { 
    // your code. 
} 

Если вы хотите и дальше доказывать, что можете поступить по-своему, то вы не решите свою проблему. У каждого раскрывающегося списка должен быть собственный уникальный идентификатор, иначе он не будет опубликован правильно. Единственный способ решить эту проблему - дать каждому свой уникальный идентификатор. Это нарушает поведение раскрывающегося списка при автоматическом получении данных, поэтому вы ДОЛЖНЫ указать список данных явно.

Так что перестаньте утверждать, что это неважная часть проблемы. Это не. Это ключ к проблеме.

РЕДАКТИРОВАТЬ2:

На основе вашего кода выше:

<%= Html.DropDownList("strSemesterToOrganize", (SelectList)ViewData["Semester"]) %>
<%= Html.DropDownList("strSemesterToBaseOn", (SelectList)ViewData["Semester"]) %>

Это все что тебе нужно

Если бы вы просто дали нам это и не спорили, решить эту проблему было бы намного проще.

person Erik Funkenbusch    schedule 08.04.2012
comment
На самом деле у меня уже есть заполненный Html.DropDownList smesters (SS2012, WS2013, SS2011) и в других Html.DroopDownList те же значения, я просто хочу получить выбранные значения из обоих списков и отправить их как параметры действия контроллера. Вот и все!! - person Usman; 09.04.2012
comment
@Usman - В тебе нет никакого смысла. Вы не можете заполнить раскрывающиеся списки, пока не создадите их. Вы создали их с помощью приведенного выше кода. Они автоматически публикуют выбранные ими значения, когда вы отправляете форму. То, что вы описываете, невозможно с учетом кода, который вы показали. - person Erik Funkenbusch; 09.04.2012
comment
@Usman - я предлагаю вам предоставить настоящий код, а не какой-то выдуманный код, потому что предоставленный вами код недействителен и не показывает, что вы на самом деле пытаетесь сделать. Используйте настоящий код. - person Erik Funkenbusch; 09.04.2012
comment
Этот DropDownList заполняется методом контроллера каким-то образом через некоторый список на основе List ‹string›, который был заполнен (например, listofSemester.Add (WS2012) вроде ...), просто забудьте об этом. Это публикует правильное значение, когда передается только один аргумент. Но мне нужно работать с ним через 2 значения выбора списка, и эти 2 списка должны каким-то образом передавать свои выбранные значения методу действия контроллера. - person Usman; 09.04.2012
comment
@Usman - Вы просите забыть о том, что имеет решающее значение для решения вашей проблемы. Если вам не нужен совет, вы не решите проблему. Ваша проблема в том, что вы полагаетесь на какое-то поведение, которое не сработает в вашей ситуации, но вы не хотите его менять. - person Erik Funkenbusch; 09.04.2012
comment
тогда что на самом деле мне нужно опубликовать, помимо материалов выше, чтобы вы четко видели, чего не хватает? - person Usman; 09.04.2012
comment
Я разместил код, в котором заполнен DropDownList. Если по-прежнему чего-то не хватает, дайте мне знать .. Спасибо. - person Usman; 09.04.2012
comment
@Usman - См. Мою правку, это решит вашу проблему. Не спорь, просто сделай это. - person Erik Funkenbusch; 09.04.2012
comment
Я уверен, что это слишком близко, но это дает указанную выше ошибку. Я включил ‹% @ Page Title = Language = C # MasterPageFile = ~ / Views / Shared / Site.Master Inherits = System.Web.Mvc.ViewPage ‹dynamic›%› Так что я думаю, что это просто как-то связано с этой строкой, может быть - person Usman; 09.04.2012
comment
@Usman - если вы не изменили свой метод получения, вам следует использовать ViewData [Semester], а не ViewData [SemesterList]. Я написал SemesterList, когда не знал вашего настоящего имени. Вы должны использовать одно и то же имя в обоих местах. - person Erik Funkenbusch; 09.04.2012
comment
О, ладно, это был всего лишь типаж. но возникшая проблема я только что выделил жирным шрифтом. - person Usman; 09.04.2012
comment
@Usman - Вы понимаете, что C # чувствителен к регистру. DropDownList, а не DropdownList. - person Erik Funkenbusch; 09.04.2012
comment
это было нормально. Я ошибся выше .. НЕ в коде .. В коде, который я написал (фактически скопировано и вставлено из другой области кода, поэтому Html.DropDownList (SemesterToOrganize, ViewData [Semester] с красной линией под и остальными) Я описал ошибку жирным шрифтом выше - person Usman; 09.04.2012
comment
@Usman - Ошибка, которую вы скопировали и вставили выше, означает, что вы использовали DropdownList, а не DropDownList. - person Erik Funkenbusch; 09.04.2012
comment
Теперь оператор ERROR изменен соответствующим образом .. :-) - person Usman; 09.04.2012
comment
@Usman - см. Мою правку выше, вы должны привести ViewData к SelectList, потому что компилятор не может определить тип динамического. (SelectList)ViewData["Semester"] - person Erik Funkenbusch; 09.04.2012
comment
Это великий мистер мистер Человек ... Это сработало !! БОЛЬШОЕ СПАСИБО за предоставленное вам время и сотрудничество. - person Usman; 09.04.2012

person    schedule
comment
Представление написано для Razor. Я думаю, его просто преобразовать в aspx. - person Paul; 09.04.2012
comment
привет, как я могу показать выбранные значения выпадающего списка в веб-сетке? - person Neo; 12.04.2012