如何从dropdownlistfor获取所选文本

时间:2016-12-28 14:02:49

标签: asp.net-mvc model-view-controller

我有一个模特:

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

如何从下拉列表中获取文字?感谢

2 个答案:

答案 0 :(得分:0)

您需要使用客户端javascript,因为更改会在浏览器中发生。

首先更改标记以将选区包装在一个范围内。

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

如果你的GET操作没有真正设置任何内容,请从上面一行删除@ViewBag.selected

现在是剧本

$(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的值也会被提交。

答案 1 :(得分:0)

模型添加一个viewmodel,如下所示

 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");