2016-12-28 3 views
-1

i ein Modell haben:Wie bekomme ich den markierten Text aus dropdownlistfor

public class studentmodel 
     { 
      public int id { get; set; } 
      public string name { get; set; } 
     } 

ich mein Dropdown füllen:

 // GET: dropdown/Test 

    public ActionResult Index() 
     { 
      List<SelectListItem> list = new List<SelectListItem>(); 
      { 
       list.Add(new SelectListItem { Text = "saurav", Value = "1"}); 
       list.Add(new SelectListItem {Text = "Rj", Value = "2" }); 
       list.Add(new SelectListItem {Text = "rahul", Value = "3" }); 
       ViewBag.studentlist = list; 
      }    
      return View(); 
     } 
     [HttpPost] 
     public ActionResult Index(studentmodel s) 
     {   
      return View(); 
     } 

ich habe eine Controller-Aktion, die Postbacks ist:

@using (Html.BeginForm("Index", "Test", FormMethod.Post)) 
     { 
      @Html.DropDownListFor(m => m.name, (IEnumerable<SelectListItem>)ViewBag.studentlist, "select student"); 

      <div> 
       <input type="submit" value="submit" /> 
      </div>  
       <div> you have selected : @ViewBag.selected </div>   
     }  

Wie bekomme ich den Text aus meiner Dropdown-Liste? Danke

Antwort

0

Sie müssen clientseitige Javascript verwenden, da die Änderung im Browser geschieht.

Zuerst ändern Sie das Markup ein wenig, um die Auswahl in einem Bereich zu umhüllen.

<div> you have selected : <span id="selectedItem">@ViewBag.selected</span> </div> 

die @ViewBag.selected aus der obigen Zeile entfernen, wenn Ihre GET Aktion ist nicht wirklich etwas, dass zu setzen.

nun das Skript

$(function(){ 
    $("#name").change(function(){ 
     var selected = $(this).find("option:selected").text(); 
     $("#selectedItem").text(selected); 
    });  
}); 

Dies wird die gewählte Option Text und festgelegt, dass auf unserer Spanne lesen.

Wenn Sie diesen Text in der Httppost Aktion möchten, können Sie

public class studentmodel 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string SelectedText{ get; set; } 
} 

Und halten Sie ein verstecktes Feld in der Form

@Html.HiddenFor(s=>s.SelectedText) 

Jetzt eine neue Eigenschaft zu Ihrer Ansicht Modell hinzuzufügen, setzen die Wert von diesem mit Javascript setzen Sie den Wert dieses versteckten Feldes.

$(function(){ 
    $("#name").change(function(){ 
     var selected = $(this).find("option:selected").text(); 
     //var selected = $("#name option:selected").text(); // another option 
     $("#selectedItem").text(selected); 
     $("#SelectedText").val(selected); 
    });  
}); 

Nun, wenn Sie das Formular aus, wird der Wert des ausgeblendeten Feld SelectedText wird ebenfalls eingereicht werden muss.

+0

ich suche nur nach C# no another JavaScript-Code. –

+0

Sie brauchen js, da das Änderungsereignis auf der Client-Seite passiert – Shyju

0

Modell ein Viewmodel als Add unten

public class studentmodel 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

public class SomeViewModel 
{ 
    public string studentname {get; set;} 
    public SelectList studentlist {get; set;} 

} 

Aktualisiert

public ActionResult Index() 
{ 
     SomeViewModel Model = new SomeViewModel(); 
     var studentlist = new List<SelectListItem>(); 
     studentlist.Add(new SelectListItem() { Value = "1", Text = "saurav" }); 
     studentlist.Add(new SelectListItem() { Value = "2", Text = "Rj" }); 
     studentlist.Add(new SelectListItem() { Value = "3", Text = "rahul" }); 
     Model.studentlist = new SelectList(studentlist,  nameof(SelectListItem.Value), nameof(SelectListItem.Text)); 

     return View(Model); 
} 


    [HttpPost] 
    public ActionResult Index(SomeViewModel s) 
    {   
     return View(); 
    } 

und Ihre Ansicht ändern, wie unten

Aktualisiert

@model somenamespace.SomeViewModel 
    @Html.DropDownListFor(m => m.studentname , Model.studentlist , "select student"); 
+0

Sie rufen das someviewmodel nicht in studentmodel dann sehen Sie es nicht Modell aufrufen.Studentenliste und dann auch in den Controller, der id = "1" ist es wird es wird id = 1 und ich will Postback so aufwändig auch –

+0

im Grunde rufen wir nur eine Klasse, die unser View-Modell SomeViewModel ist binden wir alle Daten to someviewmodel und übergeben diese mdoel an die Ansicht und auf Post-Methode gibt es einen Parameter von viewmodel so im Grunde spielen wir mit einem viewmodel nur – Curiousdev

+0

in Rasierer auch Sie müssen diese Viewmodel **@model.someviewmodel** auf der Oberseite hinzufügen rasiermesser html wie dies wird es studentlist – Curiousdev

Verwandte Themen