将C#转换为客户端Javascript
我有一个Asp.Net页面,在ListView控件中有一个带有复选框的选项列表。我已经使用分页控件应用了分页。但是,我希望在ListView的各个分页页面中保持复选框的状态。我用以下代码完成了这项工作将C#转换为客户端Javascript,c#,asp.net,javascript,ajax,asp.net-ajax,C#,Asp.net,Javascript,Ajax,Asp.net Ajax,我有一个Asp.Net页面,在ListView控件中有一个带有复选框的选项列表。我已经使用分页控件应用了分页。但是,我希望在ListView的各个分页页面中保持复选框的状态。我用以下代码完成了这项工作 private List<int> IDs { get { if (this.ViewState["IDs"] == null) { this.ViewState["
private List<int> IDs
{
get
{
if (this.ViewState["IDs"] == null)
{
this.ViewState["IDs"] = new List<int>();
}
return (List<int>)this.ViewState["IDs"];
}
}
protected void AddRowstoIDList()
{
int checkAction = 0;
foreach (ListViewDataItem lvi in lvCharOrgs.Items)
{
CheckBox chkSelect = (CheckBox)lvi.FindControl("chkSelect");
if ((((chkSelect) != null)))
{
int ID = Convert.ToInt32(lvCharOrgs.DataKeys[lvi.DisplayIndex].Value);
if ((chkSelect.Checked && !this.IDs.Contains(ID)))
{
this.IDs.Add(ID);
checkAction += 1;
}
else if ((!chkSelect.Checked && this.IDs.Contains(ID)))
{
this.IDs.Remove(ID);
}
}
}
}
protected void lvCharOrgs_ItemDataBound(object sender, ListViewItemEventArgs e)
{
ListViewDataItem lvi = (ListViewDataItem)e.Item;
if ((lvi.ItemType == ListViewItemType.DataItem))
{
// Find the checkbox in the current row
CheckBox chkSelect = (CheckBox)lvi.FindControl("chkSelect");
// Make sure we're referencing the correct control
if ((chkSelect) != null)
{
// If the ID exists in our list then check the checkbox
int ID = Convert.ToInt32(lvCharOrgs.DataKeys[lvi.DisplayIndex].Value);
chkSelect.Checked = this.IDs.Contains(ID);
}
}
if (Profile.proUserType == "basic")
{//basic account so no choice of charity
((CheckBox)e.Item.FindControl("chkSelect")).Checked = true;
((CheckBox)e.Item.FindControl("chkSelect")).Enabled = false;
}
}
私有列表ID
{
得到
{
if(this.ViewState[“IDs”]==null)
{
this.ViewState[“IDs”]=new List();
}
返回(列出)这个.ViewState[“id”];
}
}
受保护的void AddRowstoIDList()
{
int checkAction=0;
foreach(lvCharOrgs.Items中的ListViewDataItem lvi)
{
复选框chkSelect=(复选框)lvi.FindControl(“chkSelect”);
如果((((chkSelect)!=null)))
{
int ID=Convert.ToInt32(lvCharOrgs.DataKeys[lvi.DisplayIndex].Value);
如果((chkSelect.Checked&&!this.IDs.Contains(ID)))
{
this.IDs.Add(ID);
检查动作+=1;
}
如果(!chkSelect.Checked&&this.IDs.Contains(ID)),则为else
{
此.ID.Remove(ID);
}
}
}
}
受保护的void lvCharOrgs_ItemDataBound(对象发送方,ListViewItemEventArgs e)
{
ListViewDataItem lvi=(ListViewDataItem)e.Item;
if((lvi.ItemType==ListViewItemType.DataItem))
{
//在当前行中找到复选框
复选框chkSelect=(复选框)lvi.FindControl(“chkSelect”);
//确保我们引用了正确的控件
如果((chkSelect)!=null)
{
//如果该ID存在于我们的列表中,则选中复选框
int ID=Convert.ToInt32(lvCharOrgs.DataKeys[lvi.DisplayIndex].Value);
chkSelect.Checked=this.IDs.Contains(ID);
}
}
如果(Profile.proUserType==“基本”)
{//基本账户,因此没有慈善选择
((复选框)e.Item.FindControl(“chkSelect”)。选中=真;
((复选框)e.Item.FindControl(“chkSelect”)。Enabled=false;
}
}
现在我有了一个CustomValidator控件,它检查以确保选择了3到5条记录。如果这是真的,则页面有效并已处理。如果不是这种情况(如少于3个或多于5个),则页面无效,CustomValidator会抛出一个标签来通知这一事实
我在服务器端使用以下代码来实现这一点
protected void lvCharOrgsValidator_ServerValidate(object source, ServerValidateEventArgs args)
{// Custom validate lvCharOrgs
//update selected rows
AddRowstoIDList();
//get count and verify is correct range
int counter = this.IDs.Count;
args.IsValid = (counter >=3 && counter <=5) ? true : false;
}
protectedvoid lvCharOrgsValidator\u ServerValidate(对象源,ServerValidateEventArgs args)
{//自定义验证lvCharOrgs
//更新所选行
AddRowstoIDList();
//获取计数并验证其范围是否正确
int计数器=this.IDs.Count;
args.IsValid=(counter>=3&&counter看一看这篇文章。它适用于asp.net mvc,但也涵盖了一些基础知识,您可能可以对asp.net执行类似的操作。特别是,您可能会发现文章中显示的jquery远程验证属性对您打算执行的操作非常有用。看一看这篇文章。它适用于asp.net mvc,但它也涵盖了一些基础知识,您可能可以为asp.net做类似的事情。特别是,您可能会发现文章中显示的jquery远程验证属性对您打算做的事情很有用。好的,您可以始终将自己的javascript与自定义验证程序一起包含。是介绍添加ja的文章的链接vascript到验证器。你只需要编写自己的javascript,真的。好吧,你可以在自定义验证器中包含自己的javascript。这是一篇介绍如何将javascript添加到验证器的文章的链接。你只需编写自己的javascript,真的。如果你将int
更改为var
,你的code是有效的JavaScript。(但由于它也取决于需要转换的其他函数和对象。)此外,如果使用c#3.5编译器,即使使用var而不是int,它也将保持有效的c。如果将int
更改为var
,则代码是有效的JavaScript。(但由于它取决于其他函数和对象,您也需要转换它们。)此外,如果您使用c#3.5编译器,即使使用var而不是int,它也将保持有效的c。下面的操作是什么
AddRowstoIDList();
下面的内容只是一个开始,但需要更多关于上述方法的细节才能提供有效的答案
function validateRowCount(sender, args) {
//update selected rows
AddRowstoIDList(); // Does this add row indexes to an array?
//get count and verify is correct range
var counter = IDList.length;
args.IsValid = (counter >=3 && counter <=5);
}
应该像这样工作-
如果要查看代码,请将/edit添加到URL中以下操作是什么
AddRowstoIDList();
下面的内容只是一个开始,但需要更多关于上述方法的细节才能提供有效的答案
function validateRowCount(sender, args) {
//update selected rows
AddRowstoIDList(); // Does this add row indexes to an array?
//get count and verify is correct range
var counter = IDList.length;
args.IsValid = (counter >=3 && counter <=5);
}
应该像这样工作-
如果您想查看代码,请将/edit添加到URL中可能不是您想要的,但有:
“Web 2.0炒作?想要构建更好的Web吗?”
网站,但javascript太难了?不
真正的IDE?也许你应该试试jsc。
该web应用程序可以在Visual Studio中构建
Studio 2008或任何其他符合c#标准的
IDE,然后是应用程序
神奇地出现了。你应该想想
将其作为智能客户端。预编译您的
将jsc!作为
选项,而不是使用IIS和
net,您可以使用
apache,使用mysql和php。”
可能不是你想要的,但有:
“Web 2.0炒作?想要构建更好的Web吗?”
网站,但javascript太难了?不
真正的IDE?也许你应该试试jsc。
该web应用程序可以在Visual Studio中构建
Studio 2008或任何其他符合c#标准的
IDE,然后是应用程序
神奇地出现了。你应该想想
将其作为智能客户端。预编译您的
将jsc!作为
选项,而不是使用IIS和
net,您可以使用
apache,使用mysql和php。”
我听说有一个从c#(或者是IL?)到JavaScript的交叉编译器,但不幸的是,我已经记不起这个名字了,但谷歌搜索发现了一些东西