我需要在加载后从下拉列表中选择一个值:
编辑:在与视图关联的脚本中,我有:
//Dropdown cascade call when trigger is called and fill councilDropdown:
$("#districtDropdown").cascade({
url: "/Address/ListCouncilByDistrict",
paramName: "districtId",
firstOption: 'Selecione o Concelho...',
childSelect: $("#councilDropdown")
});
$("#PostalCode").keyup(function () {
loadPTPostalCode();
});
$("#PostalCodeExtension").keyup(function () {
loadPTPostalCode();
});
function loadPTPostalCode()
{
if ($("#PostalCode").val() >= 1000) {
$.ajax({
url: '/Address/GetPTPostalCode',
type: "POST",
dataType: "json",
data: { postalCode: $("#PostalCode").val(), postalCodeExtension: $("#PostalCodeExtension").val() },
success: function (data) {
if (data != null) {
$("#districtDropdown").val(data.PTDistrict_Id); // Set the Dropdown value
$('#districtDropdown').trigger('change'); // Trigger (force the dropdown to load
// *** This is done to soon, the dropdownlist of the Councils is not all loaded yet ***
$("#councilDropdown").val(data.PTCouncil_Id);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus)
}
});
}
}
编辑:观点
@model Heelp.ViewModels.AddressPTViewModel
<h2>Create</h2>
@using (Ajax.BeginForm(MVC.Address.CreateAddressPT(), new AjaxOptions { OnSuccess = "showLoginConfirmationResultMessage" }, new { @id = "AddressForm" }))
{
@Html.AntiForgeryToken()
<div class="address1">
@Html.LabelFor(model => model.Address1)
@Html.TextBoxFor(model => model.Address1)
@Html.ValidationMessageFor(model => model.Address1)
</div>
<div class="address2">
@Html.TextBoxFor(model => model.Address2)
@Html.ValidationMessageFor(model => model.Address2)
</div>
<div class="city">
@Html.LabelFor(model => model.City)
@Html.TextBoxFor(model => model.City)
@Html.ValidationMessageFor(model => model.City)
</div>
<div class="postalCode">
@Html.DisplayNameFor(m => m.PostalCode)
@Html.TextBoxFor(m => m.PostalCode, new { @Value = "" })
@Html.ValidationMessageFor(m => m.PostalCode)
</div>
<div class="postalCodeExtension">
@Html.LabelFor(model => model.PostalCodeExtension)
@Html.TextBoxFor(model => model.PostalCodeExtension)
@Html.ValidationMessageFor(m => m.PostalCodeExtension)
</div>
<div class="postalCodeCity">
@Html.LabelFor(model => model.PostalCodeCity)
@Html.TextBoxFor(model => model.PostalCodeCity)
@Html.ValidationMessageFor(m => m.PostalCodeCity)
</div>
<div id="district">
@Html.DisplayNameFor(m => m.PTDistrict_Id)
@Html.DropDownListFor(m => m.PTDistrict_Id, Model.PTDistrictList, HeelpResources.PTDistrictViewDropDownListFirstRecord, new { id = "districtDropdown" })
@Html.ValidationMessageFor(m => m.PTDistrict_Id)
</div>
<div id="council">
@Html.DisplayNameFor(m => m.PTCouncil_Id)
@Html.DropDownListFor(m => m.PTCouncil_Id, Model.PTCouncilList, HeelpResources.PTCouncilViewDropDownListFirstRecord, new { id = "councilDropdown" })
@Html.ValidationMessageFor(m => m.PTCouncil_Id)
</div>
<p>
<input type="submit" value="Create" />
</p>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
编辑:
级联功能:
// Cascade function
(function ($) {
$.fn.cascade = function (options) {
var defaults = {};
var opts = $.extend(defaults, options);
return this.each(function () {
$(this).change(function () {
var selectedValue = $(this).val();
if (selectedValue == '') {
opts.childSelect.empty();
return;
}
var params = {};
params[opts.paramName] = selectedValue;
$.post(opts.url, params, function (items) {
//$.getJSON(opts.url, params, function (items) {
opts.childSelect.empty();
if (opts.firstOption != "")
opts.childSelect.append(
$('<option/>')
.attr('value', '')
.text(opts.firstOption));
$.each(items, function (index, item) {
// alert(opts.firstOption);
opts.childSelect.append(
$('<option/>')
.attr('value', item.Id)
.text(item.Name)
);
});
});
});
});
};
})(jQuery);
但是当我这样做时,由于 Dropdownlist 尚未加载,因此 val() 尚不存在。
例如,如果我之前放置了一条警报消息,它可以正常工作,因为它是加载下拉列表的时间。
如何仅在加载下拉列表后设置理事会下拉列表的值?