2016-12-28 41 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