2015-07-26 1 views
1

Это было легко (ish) в WebForms и не проблема в WPF, но у меня возникают проблемы с заполнением DropDown в MVC, затем выберите значение из базы данных.Заполните MVC @ Html.DropDownList и выберите значение из DB

поля DB возвращается к контроллеру, передается модальным и вошел в поле зрения, как этот

@code 
         Dim vProspects As CustomerService.QuestionnaireModals = CType(ViewData("QuestionnaireModals"), CustomerService.QuestionnaireModals) 
         Dim vName As String = vProspects.Prospect_Name 
         Dim vAddress As String = vProspects.Prospect_Address 
         Dim vTown As String = vProspects.Prospect_Town 
         Dim vState As String = vProspects.Prospect_State 
         Dim vZip As String = vProspects.Prospect_Zip 
         Dim vTelephone As String = vProspects.Prospect_Telephone 
         Dim vCompany As String = vName & " <br/> " 
         vCompany += vAddress & " <br/> " 
         vCompany += vTown & ", " & vState & " " & vZip & "<br/>" 
         vCompany += "Telephone: " & vTelephone 
         @Html.Raw(vCompany) 

        End Code 

и значения вставлены в поле - в качестве примера состояния поля

@Html.TextBox("inputCompanyState", vState, New With {.id = "inputCompanyState", .class = "form-control", .style = "max-width:80px;"}) 

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

Public Function ReturnStateList() As DataTable 
    Try 
     Dim DT As New DataTable 
     With DT.Columns 
      .Add("AB", GetType(String)) 
      .Add("Name", GetType(String)) 
     End With 
     With DT.Rows 
      .Add("0", "Select State") 
      .Add("AL", "Alabama (AL)") 
      .Add("AK", "Alaska (AK)") 
      .Add("AZ", "Arizona (AZ)") 
      .Add("AR", "Arkansas (AR)") 
      .Add("CA", "California (CA)") 
      .Add("CO", "Colorado (CO)") 
      .Add("CT", "Connecticut (CT)") 
      .Add("DE", "Delaware (DE)") 
      .Add("DC", "District of Columbia (DC)") 
      .Add("FL", "Florida (FL)") 
      .Add("GA", "Georgia (GA)") 
      .Add("HI", "Hawaii (HI)") 
      .Add("ID", "Idaho (ID)") 
      .Add("IL", "Illinois (IL)") 
      .Add("IN", "Indiana (IN)") 
      .Add("IA", "Iowa (IA)") 
      .Add("KS", "Kansas (KS)") 
      .Add("KY", "Kentucky (KY)") 
      .Add("LA", "Louisiana (LA)") 
      .Add("ME", "Maine (ME)") 
      .Add("MD", "Maryland (MD)") 
      .Add("MA", "Massachusetts (MA)") 
      .Add("MI", "Michigan (MI)") 
      .Add("MN", "Minnesota (MN)") 
      .Add("MS", "Mississippi (MS)") 
      .Add("MO", "Missouri (MO)") 
      .Add("MT", "Montana (MT)") 
      .Add("NE", "Nebraska (NE)") 
      .Add("NV", "Nevada (NV)") 
      .Add("NH", "New Hampshire (NH)") 
      .Add("NJ", "New Jersey (NJ)") 
      .Add("NM", "New Mexico (NM)") 
      .Add("NY", "New York (NY)") 
      .Add("NC", "North Carolina (NC)") 
      .Add("ND", "North Dakota (ND)") 
      .Add("OH", "Ohio (OH)") 
      .Add("OK", "Oklahoma (OK)") 
      .Add("OR", "Oregon (OR)") 
      .Add("PA", "Pennsylvania (PA)") 
      .Add("RI", "Rhode Island (RI)") 
      .Add("SC", "South Carolina (SC)") 
      .Add("SD", "South Dakota (SD)") 
      .Add("TN", "Tennessee (TN)") 
      .Add("TX", "Texas (TX)") 
      .Add("UT", "Utah (UT)") 
      .Add("VT", "Vermont (VT)") 
      .Add("VA", "Virginia (VA)") 
      .Add("WA", "Washington (WA)") 
      .Add("WV", "West Virginia (WV)") 
      .Add("WI", "Wisconsin (WI)") 
      .Add("WY", "Wyoming (WY)") 

     End With 


     Return DT 
    Catch ex As Exception 
     ' EmailError(ex) 
     Return Nothing 
    End Try 
End Function 

, а затем выберите значение «vState» Я теряюсь ...

Любые предложения? Спасибо

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

@Html.DropDownList("AB", vProspects.States, New With {.class = "form-control"}) 

вылечил его для меня. Сколько часов пытался выяснить, почему он не работал, пока я не заметил, что после заполнения его из DataTable я не смог вернуть список :-(

+0

Вызов 'Html.DropDownList' вместо' Html.TextBox'. Вам необходимо соответствующим образом упаковать список значений, но подпись для этого метода сообщит вам, что вам нужно. – jmcilhinney

+0

Благодарим вас за ответ - проблема, с которой я столкнулась, заключается в том, как получить значения данных в представлении. В WebForms я просто сделал это как Code Behind и заполнил список. Не могли бы вы сделать небольшой пример? Тип данных создается из модуля, который содержит многократно используемые функции. – gchq

ответ

1

Вот версия решения на C#. чтобы преобразовать его в VB.NET

убедитесь, что View модель имеет свойства выпадающего меню. один для опций выпадающих и один для SelectedItem.

, например,

public class AddUserVM 
{  
    public string Name { set;get;} 
    public List<SelectListItem> States { set;get;} 
    public int SelectedState { set;get;} 

    public AddUserVM() 
    { 
     Cities=new List<SelectListItem>(); 
    } 
} 

теперь в вашем GET метод действий, заполнить Штаты коллекции модели представления и отправить ее в представление.

public ActionResult AddUser() 
{ 
    var addUserVM = new AddUserVM(); 
    addUserVM.States = GetStates(); 
    return View(addUserVM); 
} 
private List<SelectListItem> GetStates() 
{ 
    var list = new List<SelectListItem>(); 
    //Hard coded for demo. You may get the items 
    // from a datasource and add to the list 
    list.Add(new SelectListItem { Value = "1", Text = "MI" }); 
    list.Add(new SelectListItem { Value = "2", Text = "OH" }); 
    return list; 
} 

Теперь на ваш взгляд,

@model ReplaceYourNameSpaceHere.AddUserVM 
@using (Html.BeginForm()) 
{ 
    <p> 
     Name @Html.TextBoxFor(s=>s.Name) 
    </p> 
    <p> 
     State @Html.DropDownListFor(s=>s.SelectedState,Model.States,"Select") 
    </p> 
    <input type="submit" /> 
} 

Когда пользователь отправляет форму, вы можете прочитать SelectedState свойство, чтобы получить выбор раскрывающийся пользователя.

[HttpPost] 
public ActionResult AddUser(AddUserVM model) 
{ 
    if (ModelState.IsValid)    
    { 
     // get the selected state 
     int stateId = model.SelectedState; 
     // to do : Save and redirect (PRG pattern) instead of this demo code below 
     return View("Results", model); 
    } 
    //Reload the Cities collection again 
    model.States = GetStates(); 
    return View(model); 
} 
+0

Спасибо за ваш ответ. Я уверен, что у меня есть контроллер и модель, но я смущен о s => s.SelectedState part - о чем s => s? – gchq

+0

Попался в конце - спасибо за сообщение всего этого кода! Отмечены как ответ и поддержан – gchq

+0

@gchq: Круто! Рад, что смог помочь. – Shyju

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