62,046
社区成员
发帖
与我相关
我的任务
分享
<%@ Page Language="C#" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>演示动态下载 json 内容文件并绑定到 select 元素</title>
<%--首先要使用 Nuget 添加 knockoutjs、jquery 到你的工程--%>
<script src="Scripts/knockout-3.4.0.js"></script>
<script src="Scripts/jquery-1.9.1.min.js"></script>
</head>
<body>
<select data-bind="options: myItems, attr: { size: height }, value: Selected">
</select>
<hr />
请输入要下载的文件的名字(不含后缀):
<input type="text" data-bind="value: dataFileName" style="width: 90px;" />
<hr />
现在选中了:<span data-bind="text: Selected"></span>
<script type="text/javascript">
var viewmodel = function () {
this.myItems = ko.observableArray([]);
this.height = ko.computed(function () {
return this.myItems().length > 4 ? 4 : this.myItems().length;
}, this);
this.dataFileName = ko.observable("names");
this.Selected = ko.observable("");
this.refresh = function () {
var self = this;
$.get("datademos/" + this.dataFileName() + ".txt", null, function (d) {
var all = JSON.parse(d);
self.myItems([]);
for (var i = 0; i < all.length; ++i)
self.myItems.push(all[i]);
});
};
this.dataFileName.subscribe(function () {
this.refresh();
}, this);
this.refresh();
};
ko.applyBindings(new viewmodel());
</script>
</body>
</html>
这样一个页面,首先把默认的 <form runat="server"></form>删除掉了,接下来就是设计了页面的前端 viewmodel 类型,并且在页面加载时(最后一行代码)绑定一个 viewmodel 实例给页面。
你可以在网站的 datademos 目录下放两个文件,例如一个名为 names.txt,其内容为[
"张三",
"李四",
"王二麻子",
"小2B"
]
另外再放一个abc.txt文件,内容类似(随便修改),然后运行这个页面。你可以看到,当你在文本框中录入了文件名,当焦点移开输入框的时候,就会动态下载新的数据文件。当然你也可以在输入时随时(autocompleted)调用执行 refresh 函数。
这是前端编程。
但是你现在如果只是会点 asp.net,不要胡乱写前端代码。我告诉你,asp.net 程序员如果胡乱自学点 javascript、jquery,那离真正开发前端商业化应用的距离就差太远了,那样反而要失业了(还不如先把 asp.net 服务器控件学好再说)。要学习好前端开发,你至少要掌握一种极高编程效率的mvvm或者mvc前端框架,不要用混乱的javascript、jquery代码去乱改dom对象。
jQuery(function(){
ShowSearchCreateOrderInfo();
});
function ShowSearchCreateOrderInfo()
{
ShowSearchInfo(jQuery('#输入框的控件Id'),{
type:'search',
url:'WebService2.asmx/GetCarBrandValue',
NoAutoShow:true,
othInfo:true,
othClick:function(ele){
//设置联动
var arr=jQuery('#输入框的控件Id').attr('othInfo').split('↑');
if(arr.length!=1)
{
alert('出错了');
return false;
}
jQuery('#下拉框的控件Id').val(arr[0]);
}
});
}
<script type="text/javascript" src="Js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="Js/InputSearch.js"></script>
2、调用方法如下:
jQuery(function(){
ShowSearchCreateOrderInfo();
});
function ShowSearchCreateOrderInfo()
{
ShowSearchInfo(jQuery('#输入框的控件Id'),{
type:'search',
url:'WebService2.asmx/GetCarBrandValue',
condition:jQuery("#Hidden1").val(),
NoAutoShow:true,
othInfo:true,
othClick:function(ele){
//设置联动
var arr=jQuery('#OTxtItem02').attr('othInfo').split('↑');
if(arr.length!=4)
{
alert('出错了');
return false;
}
jQuery('#下拉框的控件Id').val(arr[0]);
}
});
}
接下来就是写WebService2.asmx里面的GetCarBrandValue方法
public string GetCarBrandValue(string FieldInfo)
{
string[] arr = Server.UrlDecode(FieldInfo).Trim('↑').Split('↑');
if (arr.Length != 1)
{
return "传递参数有误";
}
string sql = "select 输入框控件所对应的数据库表字段名称,下拉框控件所对应的数据库表字段名称 from CarsInfo where 输入框控件所对应的数据库表字段 like '%" + arr[0] + "%' ";
DataTable dt = rdtable(sql);
StringBuilder strText = new StringBuilder();
int count = Convert.ToInt32(arr[1]);
int indexC = 0;
if (dt.Rows.Count == 0)
{
return "没有相关数据";
}
string othInfo = "";
foreach (DataRow dr in dt.Rows)
{
if (indexC < count)
{
othInfo = dr["下拉框控件所对应的数据库表字段名称"].ToString().Trim() ;
strText.Append("<input type='input' style='border:0px;cursor:pointer; width:" + arr[2] + "' value='" + dr["输入框控件所对应的数据库表字段名称"].ToString().Trim() + "' othInfo='" + othInfo + "' rV='" + dr["输入框控件所对应的数据库表字段名称"].ToString().Trim() + "' class='inputSel001'/>");
indexC++;
}
else
{
break;
}
}
return strText.ToString();
}