QuestionList 是用Viewbag从服务器端传过来的一个List集合,想用JS变量num对其进行筛选,但是服务器端的代码不能识别JS变量num。
这就需要使用ajax了
你在后台写个方法通过num获取QuestionName
然后使用ajax去调用就实现了
你这样写是实现不了的
设计问题,提供两种参考:
1、ajax重新去请求数据;
2、客户端筛选;
你把前端和服务器端搞混了吧。
针对你的问题:有什么方法可以把JS的变量值传递给.net后台代码
需要对服务器端发起请求。
这是典型的早期WEB开发用户,分不清啥是前端啥是后端,我也是一段时间后才突然明白了。
记住一点,
javascript在浏览器运行,这时候已经没有NET啥事情了,所有的NET代码已经转换为前端的HTML和JS了。
解决方案:
按照幻天芒说的。
序列化 反序列化
不行的,js控制不住C#代码,即使你在JS中的判断为false也会执行false中的代码,亲身体会
你可以把服务端对象生成一个js数组对象,然后用js访问。也就是生成一堆js代码来构建这样一个数组。
至少没办法混写的。
把QuestionList转为Json,用each去循环,再用Num来对应。
可以拐个弯,试一下用JS去调用C#的函数,该函数可以进行传参
举例:
<script type="text/javascript">
$(function () {
var data = { "action": "getumenguuid" };
$.ajax({
type: "POST",
url: "ashxpub/pushHandler.ashx",
async: false,
data: data,
dataType: "json",
error: function (x, r, e) {
if (r == "parsererror") {
window.top.location = '/Login.html';
return false;
}
alert('通讯失败');
return false;
},
success: function (result) {
if (result.totalcount <= 0) {
$.messager.alert("加载信息失败", "warning");
return false;
}
var bulidhtml = new StringBuilder();
bulidhtml.appendFormat("<div class=\"checkbox-bar\" >");
//jqery循环
$.each(result, function (k, v) {
bulidhtml.appendFormat("<label><input type=\"checkbox\" name=\"ckusertype\" value=\"{0}\">{1}</label>", v.uuid, v.name);
});
bulidhtml.appendFormat("</div>");
$("#tdagent").prepend(bulidhtml.toString());
return true;
}
});
});
</script>
C#hanlder.ashx代码组装一个json对象数组:
private string GetUmengUuid()
{
JArray arr = new JArray();
Dictionary<string, string> dicUmeng = SiteInfo.GetUmengPush;
foreach (KeyValuePair<string, string> pair in dicUmeng)
{
JObject obj = new JObject();
obj["uuid"] = pair.Key;
obj["name"] = pair.Value;
arr.Add(obj);
}
return arr.ToString();
}
前台代码:
如你的 var models= eval(“@Newtonsoft.Json.JsonConvert.SerializeObject(view.bag)”);
试试。
这样就把你后台List转换为了js对象
这个问题已经解决很久了,不过你的做法跟我的解决方法很像,只不过我是用list集合的一个扩展方法ToJson()转换的
@fhey: 嗯。。