我有一个交易类型的下拉列表,在选择时应填充交易者的下拉列表。 我的观点如下:
`<ul>
<li>
<label>
<span class="mandatory">*</span>Trader Type:</label>
<%=Html.DropDownList("TraderType", (SelectList)ViewData["TraderType"])%>
<%--<select id="ddlTraderType" name="TraderType">
<%foreach (SelectListItem item in (SelectList)ViewData["TraderType"])
{ %>
<option value="<%=item.Value %>">
<%=item.Text %></option>
<%} %>
</select>--%>
<span class="tagline">Select a Trader type from here<strong></strong></span></li>
<li>
<label>
<span class="mandatory">*</span>Trader:</label>
<select name="Trader" id="Trader">
</select>
<span class="tagline">Select a Trader from here<strong></strong></span></li>
</ul>`
我尝试使用JQuery,但我无法获得'TraderType'下拉列表的更改事件。 我的剧本是:
$("TraderType").change(function() {
alert("Change");
$.ajax({ url: $("#ListTraders").attr("action"),
type: 'GET',
contentType: "application/json; charset=utf-8",
cache: false,
data: { part: $("#TraderType").val() },
dataType: 'json',
async: false,
success: function(data) {
if ((data.lstTraders.length) > 0) {
for (var count = 0; count < data.lstTraders.length; count++) {
$("#Trader").append("<option value='" + data.lstTraders[count].Id.toString() + "'>" +
data.lstTraders[count].TraderName + "</option>");
}
}
}
});
});
控制器中的代码是:
public JsonResult ListTraders(string trdrTypeId)
{
IList<HSTrader> lstTraders = new List<HSTrader>();
Build objBld = new Build();
Document objDoc = new Document();
string message = string.Empty;
bool result = true;
try
{
int trdrType = Convert.ToInt32(trdrTypeId);
lstTraders = objBld.GetTradersByTrdrTypeId(trdrType);
}
catch (Exception ex)
{
message = ex.Message;
result = false;
}
return Json(new { Success = result, Message = message, lstTraders = lstTraders });}
请帮我解决这个问题。
答案 0 :(得分:2)
我建议你在这里使用控件;
演示:http://demo.aspnetawesome.com/AjaxDropdownDemo
Ajax Dropdown控件可以很容易地用于级联下拉列表。
此外,还有许多其他有用的控件。
答案 1 :(得分:2)
$("#TraderType").change(function() {
});
你错过了# 至于控制器中的操作,请尝试并更改POST中的VERB
$.ajax({ url: $("#ListTraders").attr("action"),
type: 'POST',
按照以下方式更改您的控制器:
[HttpPost]
public JsonResult ListTraders(string trdrTypeId)
...当你返回JSON时,你应该改变它:
return Json(new { Success = result, Message = message, lstTraders = lstTraders }, JsonRequestBehavior.DenyGet);
另外,这个参数必须匹配
data: { trdrTypeId: $("#TraderType").val() },
public JsonResult ListTraders(string trdrTypeId)
答案 2 :(得分:1)
jQuery语法不对吗?尝试在元素的ID之前添加哈希:
$("#TraderType").change(function...
答案 3 :(得分:1)
suja,
确保您的交易者点击是在直播活动内(以及在文件准备活动内),即:
<script type="text/javascript">
$(document).ready(function() {
$("#TraderType").live('change', function() {...});
});
</script>
希望这会有所帮助..
答案 4 :(得分:1)
@Suja:这就是我所做的并且有效。 我也删除了这一行=&gt; contentType:“application / json; charset = utf-8”,
<强> HTML 强>:
<ul>
<li>
<label>
<span class="mandatory">*</span>Trader Type:</label>
<%=Html.DropDownList("TraderType", (SelectList)ViewData["TraderType"])%>
<span class="tagline">Select a Trader type from here<strong></strong></span>
</li>
<li>
<label>
<span class="mandatory">*</span>Trader:</label>
<select name="Trader" id="Trader"></select>
<span class="tagline">Select a Trader from here<strong></strong></span>
</li>
</ul>
<强>的Javascript 强>:
<script type="text/javascript">
$(document).ready(function() {
$("#TraderType").change(function() {
$.ajax({
url: '<%=Url.Action("ListTraders", "Test001")%>', // MY SAMPLE
type: 'POST',
// contentType: "application/json; charset=utf-8",
cache: false,
data: { trdrTypeId: $("#TraderType").val() },
dataType: 'json',
async: false,
success: function(data) {
if ((data.lstTraders.length) > 0) {
for (var count = 0; count < data.lstTraders.length; count++) {
$("#Trader").append("<option value='" + data.lstTraders[count].Id.toString() + "'>" +
data.lstTraders[count].TraderName + "</option>");
}
}
}
});
});
});
</script>
C#
[HttpPost]
public JsonResult ListTraders(string trdrTypeId)
{
return (Json(true, JsonRequestBehavior.DenyGet));
}
答案 5 :(得分:0)
1
<%:Html.DropDownList("SubDepartment", (SelectList)ViewData["SelectListSubDepartment"], new { id = "SubDepartment", @class = "combobox" })%>
提供默认列表(如果有)。
2。 创建一个javascript函数
<script type="text/javascript">
function onddlChange() {
$.ajax({
contentType : 'application/json; charset= utf-8',
dataType: 'json',
type : 'POST',
url : "/ControllerName/IndexChk",
success : function(data){
var markup = '';
for (var x = 0; x < data.length; x++) {
markup += "<option value='" + data[x].Value + "'>" + data[x].Text + "</option>";
}
$('#SubDepartment').html(markup).show();
},
error: function(ret){
alert(ret);
}
});
}
</script>
3。现在提供Controller操作方法的列表。
public JsonResult IndexChk(string selectedvalue = null)
{
List<Sbu> departmentList = new List<Sbu>()
{
new Sbu { Id = 1, Name="SubPublishing"},
new Sbu { Id = 2, Name="SubSoftware"},
new Sbu { Id = 3, Name="SubEngineering"},
new Sbu { Id = 4, Name="SubShipping"},
new Sbu { Id = 5, Name="SubTranscription"}
};
var selectList = new SelectList(departmentList, "id", "name", selectedvalue);
return Json(selectList, JsonRequestBehavior.AllowGet);
}
就是这样,现在在onclick,onchange等任何事件上调用创建的javascript函数。