我有一个Html.DropDownListFor,一个文本框,以及一个包含列表“sourceWatchListParameters”的模型。
我的最终目标是,当在下拉列表中选择某个项目时,使用该特定sourceWatchList的属性“DefaultParameter”填充文本框。
$(function() {
$('select#WatchListDropDown').change(function () {
var e = document.getElementById("#WatchListDropDown").selectedIndex.value;
@foreach (var watchlist in Model.sourceWatchListParameters)
{
@:if (watchlist.WatchListId == e)
{
@: var def = document.getElementById("expDefault");
@: def.value = watchlist.DefaultParameter;
}
}
})
});
正确调用该函数,但我无法弄清楚找到正确的sourceWatchListParameter并显示其DefaultParameter的逻辑/语法。就像现在一样,我看到选择时文本框没有变化。我确信有一种更简单的方法可以重写它。
感谢您提供任何指导
答案 0 :(得分:2)
我想你有这样的事情:
@Html.DropDownListFor(
m => m.WatchListDropDown,
Model.SourceListWatchListDropDown() ...)
这里你只有值('id')和描述,但你可以做这样的事情来得到3个值:
<select id="WatchListDropDown" name="WatchListDropDown">
@foreach (var wp in Model.sourceWatchListParameters)
{
<option value="@wp.WatchListId" data-defparam="@wp.DefaultParameter">@wp.Description</option>
}
</select>
在这种情况下,如果你需要获取默认参数,你只需要这样做:
$(function() {
$('#WatchListDropDown').bind('change', function () {
var newValue = $(this).find('option:selected').data('defparam');
$('#expDefault').val(newValue);;
})
});
如果要渲染页面已经指定了值,则可以执行以下操作:
$('#WatchListDropDown').bind('change', function () {
...
}).trigger('change');
修改强>
解决@Jonesy
假设“Model.sourceWatchListParameters”具有此值:
[
{
WatchListId = 1,
Description = "Description 1"
},
{
WatchListId = 3,
Description = "Description 3"
},
{
WatchListId = 3,
Description = "Description 3"
}
]
您的代码如下:
$('select#WatchListDropDown').change(function () {
if ($('#WatchListDropDown').val() == "1")
$("#expDefault").val("Description 1");
}
if ($('#WatchListDropDown').val() == "2")
$("#expDefault").val("Description 2");
}
if ($('#WatchListDropDown').val() == "3")
$("#expDefault").val("Description 3");
}
})
答案 1 :(得分:0)
最终得到它:
$('select#WatchListDropDown').change(function () {
@foreach (var w in Model.sourceWatchListParameters)
{
@:if ($('#WatchListDropDown').val() == "@w.WatchListId.ToString()")
@:{
@: $("#expDefault").val("@w.Description");
@:}
}
})