文章之初,首先将C#调用前台js的方法贴出,相当于一个固定的格式,在调用其他方法的时候只需要将方法名替换掉即可。
ScriptManager.RegisterStartupScript(Page, this.GetType(), DateTime.Now.Ticks.ToString(), funcName + "('" + param + "');", true);
这里的funcName即使将要调用的前台js方法。有了核心的语法之后,就是具体的实现了,先来看看前台的js脚本代码,这也是最终要执行的函数。
function ScrollToSelectNode(obj)
{
// alert(obj);
try
{
var elem = document.getElementById(obj);
if(elem != null )
{
var node = document.getElementById(elem.value);
if(node != null)
{
//滚动被选择节点到TreeView顶部
node.scrollIntoView();
}
}
}
catch(oException)
{
}
}
在常见的drp系统中,在页面的左侧,往往会动态生成一个树状结构,来展示物资分类的层次信息,所以完全可以把该js方法,封装到js库文件中,不同的页面只需添加js文件的引用即可,接下来,就是在C#后台来调用这个函数了:
/// <summary>
/// 执行指定函数,函数名称不包含();
/// </summary>
/// <param name="funcName">函数名称</param>
/// <param name="param">传递参数</param>
public void ExecuteFunction(string funcName, string param)
{
funcName = CheckFuncName(funcName);
ScriptManager.RegisterStartupScript(Page, this.GetType(), DateTime.Now.Ticks.ToString(), funcName + "('" + param + "');", true);
}
/// <summary>
/// 检验函数名称是否包含();
/// </summary>
/// <param name="funcName">函数名称</param>
/// <returns>函数名称</returns>
private string CheckFuncName(string funcName)
{
if (funcName.EndsWith(";"))
{
funcName = funcName.TrimEnd(';');
}
if (funcName.EndsWith(")"))
{
funcName = funcName.TrimEnd(')');
}
if (funcName.EndsWith("("))
{
funcName = funcName.TrimEnd('(');
}
return funcName;
}
总结:在解决问题的时候,我们首先应该站在一定的高度,看待问题,比如在学习了前端的js脚本的时候,是否想过有没有一种方法可以在后台执行前台的函数?后台中的C#可不可以写在界面上呢?如果可以的话,什么时候用?应该遵循什么样的语法结构?同样的,前台的js可不可以写到C#中呢?如果可以的话,什么样的业务最适合使用?
另外,js并没有想象中的那么难,只要遵循一定的学习规律,有了一定的基础知识,多浏览比较好的例子,再亲自动手敲一些实例,很快就会提高的。在面对任何一个新的或者是没有学过的技术的时候,打倒自己的永远不是技术本身,而是缺乏自信的潜意识。