2016-12-28 81 views
-1

我有一個模型:怎樣才能從所選文本dropdownlistfor

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

我填充我的下拉:

 // 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(); 
     } 

我有一個控制器的動作是回傳:

@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>   
     }  

如何從我的下拉列表中獲取文本?謝謝

回答

0

您需要使用客戶端JavaScript作爲更改發生在瀏覽器。

首先將標記稍微更改一點,以便在一個範圍內包裝選擇。

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

從上面的行中刪除@ViewBag.selected如果您的GET動作是不是真的進行任何設置了這一點。

現在腳本

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

這將讀取所選選項的文本,並設置在我們的跨度。

如果你想在HttpPost行動這段文字,你可以在新的屬性添加到您的視圖模型

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

並保持一個隱藏字段的形式裏面

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

現在,設置這個使用javascript的值設置了這個隱藏字段的值。

$(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); 
    });  
}); 

現在,當您提交表單時,隱藏字段SelectedText的值也將被提交。

+0

我只看c#沒有其他的JavaScript代碼。 –

+0

你需要js作爲變化事件發生在客戶端 – Shyju

0

型號添加一個視圖模型如下

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;} 

} 

更新

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(); 
    } 

,改變你的看法如下

更新

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

你沒有調用somemodel in studentmodel然後查看它不會調用模型。學生名單,然後也必須改變到控制器這是id =「1」它不會它會id = 1,我想要回發如此詳盡也 –

+0

10基本上我們只調用一個類這是我們的視圖模型SomeViewModel我們綁定所有數據到someviewmodel並傳遞這個mdoel到視圖和post方法有一個viewmodel的參數,所以基本上我們只用一個viewmodel在剃刀上玩 – Curiousdev

+0

也必須在這個頂部添加這個viewmodel **@model.someviewmodel剃刀html這樣它會得到學生名單 – Curiousdev