我试图将SelectListItem
用于MVC项目,按照我的预期填充下拉列表。但是当我将选择值传递给使用此model.CodeDropDown.ToString()
接受字符串的函数时,我得到的System.Collections.Generic.List 1[System.Web.Mvc.SelectListItem]
不是字符串。
如何将所选值作为字符串?
我有一个ViewModel
类看起来像这样:
public class HomeViewModel
{
[Required]
[DisplayName("Code")]
public IEnumerable<SelectListItem> CodeDropDown { get; set; }
public string SelectedValue { get; set; }
}
我使用此Controller
public ActionResult Index()
{
var model = new HomeViewModel();
using (var dbCon = new SomeDBContext())
{
model.CodeDropDown = dbCon.CodeID.ToList().Select(x => new SelectListItem
{
Value = x.Name.ToString(), Text = x.CodeDropDown.ToString()
}).DistinctBy(c => c.Value);
}
return View(model);
}
}
我尝试使用SelectListItem
这样的值,
public ActionResult Index(HomeViewModel model)
{
var results = mainDbContext.GetSomeResult(model.CodeDropDown.ToString(), model.Prop2, model.Prop3);
return View(results);
}
查看如下:
@Html.DropDownListFor(model => model.SelectedValue, Model.CodeDropDown, "--")
答案 0 :(得分:1)
在HomeViewModel中再添加一个属性(SelectedThingId或更有意义的东西),以便从下拉列表中保存所选内容的值。
在您的视图中(您尚未发布视图代码)具有以下内容:
@Html.DropDownListFor(x=>x.SelectedThingId, Model.CodeDropDown)
然后在您的控制器中,您可以使用以下方式获取此值:
model.SelectedThingId; // model is passed into your controller has you have it.
答案 1 :(得分:1)
在模型中添加2个属性
public string CodedropdownID{ get; set; } //to store the selected dropdown value Id
public string CodedropdownText{ get; set; } //to store the selected dropdown value text
按如下所示更改视图,并将onchange事件添加到下拉列表中:
@Html.DropDownListFor(m=> m.CodedropdownID, m.CodeDropDown, "--")
@Html.Hiddenfor(m=>m.CodedropdownText)
添加以下脚本:
<script type="text/javascript">
$("#CodedropdownID").on("change", function {
$("#CodedropdownText").val($(this).text());
});
</script>
更改控制器方法
public ActionResult Index(HomeViewModel model)
{
var results = mainDbContext.GetSomeResult(model.CodedropdownText.ToString(), model.Prop2, model.Prop3);
return View(results);
}