我在MVC 4视图中有一个下拉框。当下拉框中的值更改时,我想要读取所有选定的值。每个选择包含3个项目。第一个:Id,第二个:用户在表单上看到的值,第三个:是文件的路径。一切正常但我无法阅读TemplatePath。如何使用jquery读取用户选择的templatePath。
我知道如何读取id和所选值,但我似乎找不到阅读路径的方法。
我的控制器创建视图中使用的SelectList:
ViewBag.TemplateList = new SelectList(db.Templates.ToList(), "TemplateId", "TemplateTitle", "TemplatePath");
视图使用选择列表并填充下拉框:
@Html.DropDownListFor(model => model.TemplateId, ViewBag.TemplateList as IEnumerable<SelectListItem>, "-- No Template --", new { @id = "TemplateChoice"})
我有一个使用Jquery的javascript文件,所以当模板下拉框改变时,我想从下拉框中读取TemplatePath。
我的javascript文件如下:
$("document").ready(function () {
$("#TemplateChoice").change(function () {
var templateID = $("#TemplateChoice option:selected").val();
var templateText = $("#TemplateChoice option:selected").text();
//Here I need code that will read the TemplatePath
});
});
任何帮助都将不胜感激。
答案 0 :(得分:0)
看起来您正试图在下拉列表中存储3个值,默认情况下只存储两个值。您可以使用数据属性为列表中的每个选项添加路径。查看this answer以获取设置和检索它们的示例。
答案 1 :(得分:0)
SelectList构造函数中没有第3个值。见docs
答案 2 :(得分:0)
你的问题在这里:
ViewBag.TemplateList = new SelectList(db.Templates.ToList(), "TemplateId", "TemplateTitle", "TemplatePath");
SelectList构造函数的第四个参数用于当前选定的值。 IE:
ViewBag.TemplateList = new SelectList(db.Templates.ToList(), "TemplateId", "TemplateTitle", db.Templates.First());
默认情况下,这将选择“模板”列表中的第一个项目。这不是用于SelectListItems上的属性,就像您在此处指定的那样。您可以编写一个扩展方法,为选择列表项指定附加属性。但是你将无法使用SelectList和DropDownListFor
完成此任务