查看: 1851|回复: 16
|
VB.NET拿不到Javascript return 的 value?
[复制链接]
|
|
我被迫使用的是 3rd Party 的 Code,
它的Javascript 会 return 一个 value,
然后我用Javascript把它Store去一个Hidden里:
<input type="hidden" id="hidBckgImg" runat="server" />
然后我尝试把这个value写出来,可是却是空白的 - hidBckgImg.value;
可是同时如果我使用Javascript prompt 它出来,它却是有value的
- alert(document.getElementById('" + hidBckgImg.ClientID + "').value);

我该怎么样才可以使用 VB.Net 方式 - hidBckgImg.value 得到它的value呢?
谢谢。 |
|
|
|
|
|
|
|
发表于 26-1-2007 02:55 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 26-1-2007 06:36 PM
|
显示全部楼层
总之呢,我会从3rd Party(Javasript来的)那边得到一个value,然后我也使用同样的Javasript把value Store去一个Hidden里,也就是 <input type="hidden" id="hidBckgImg" runat="server" /> 啦!
然后我按Submit button的时候噢,
<asp:Button ID="btnSubmit" runat="server" Text="Create" CssClass="button" />
我有一个Validation(VB.net 写的 - uValid()),如果有错误噢,hidBckgImg.value 就会有value出来,但是如果没有错误,直接要insert去DB呢,hidBckgImg.value 却是空的。
它的分别是一个Page.IsPostBack 是 False(没有错误),另一个 Page.IsPostBack 是 True (有错误)。
Sub CreateArticle(ByVal sender As Object, ByVal e As System.EventArgs)
'把3rd Party value Store去 Hidden。
Master.sendJS("if (!MyBgImg == """") { document.getElementById('" + hidBckgImg.ClientID + "').value = MyBgImg; }")
If Not uValid() Then
Return
End If
'我自己用javascript prompt 出来看是有value的。
Master.sendJS("alert(document.getElementById('" + hidBckgImg.ClientID + "').value)")
'我自己用 VB.Net prompt 出来看却是空的。
Master.sendAlert("1=" + hidBckgImg.Value)
End Sub
我都在同一页里做完这些事情。。。。
希望你看得明白我在写什么啦。。。。
[ 本帖最后由 smallsotong 于 29-1-2007 10:10 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 27-1-2007 10:22 AM
|
显示全部楼层
是不是.net2.0 vb .net?
是的话,我告诉你 那是一个.net 2.0 framework bug , 自己想办法解决吧 |
|
|
|
|
|
|
|

楼主 |
发表于 29-1-2007 10:06 AM
|
显示全部楼层
原帖由 lovefoe 于 27-1-2007 10:22 AM 发表
是不是.net2.0 vb .net?
是的话,我告诉你 那是一个.net 2.0 framework bug , 自己想办法解决吧
是 .Net2.0,难道就没有解决方法吗?
如果是 framework bug,网上应该很多人都遇过了,
应该有各种 Solution 的,可是为什么我都找不到?
请问,既然你知道这个bug,那么你的解决方法是如何呢?
谢谢。 |
|
|
|
|
|
|
|
发表于 30-1-2007 01:19 AM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 30-1-2007 10:22 AM
|
显示全部楼层
原帖由 goatstudio 于 30-1-2007 01:19 AM 发表
可以看看你的 Page_Load 吗?
我的 Page_Load 可以说是空白的,就算有东西也是不关事的(非常肯定),
只是我自己尝试解决到没有其他IDEAL解决的时候,
突然想要把 Page.IsPostBack 显示出来看看而已。 |
|
|
|
|
|
|
|
发表于 30-1-2007 10:30 AM
|
显示全部楼层
原帖由 smallsotong 于 30-1-2007 10:22 AM 发表
我的 Page_Load 可以说是空白的,就算有东西也是不关事的(非常肯定),
只是我自己尝试解决到没有其他IDEAL解决的时候,
突然想要把 Page.IsPostBack 显示出来看看而已。
如果我没猜错, 关键就在于你的 Page_Load.
我不知道你如何用 Javascript 来储存一个 value.
但是, 当你按一个 button, 整个 page 就会重新 load 过... 那时候你的 value 可能也会不见了. (要看你的 code 怎么写)
我建议你, 用 Request.Form("hidden field") 试试看. |
|
|
|
|
|
|
|

楼主 |
发表于 30-1-2007 06:23 PM
|
显示全部楼层
原帖由 goatstudio 于 30-1-2007 10:30 AM 发表
如果我没猜错, 关键就在于你的 Page_Load.
我不知道你如何用 Javascript 来储存一个 value.
但是, 当你按一个 button, 整个 page 就会重新 load 过... 那时候你的 value 可能也会不见了. (要看你的 c ...
不是的,我的例子是,当我按 Submit Button, 整个 page 重新 load 过... 那时候我的 value 才出现,
我之前说有一个 Validation Function - uValid() 吗? 如果有错误,它 Return 回去 (Page.IsPostBack 变成 True 了),然后我再按 Submit,value 反而出现了;
但是,如果没有任何错误,uValid 没有 Return 而直接要做什么的时候 (Page.IsPostBack 仍然是 False),他的 value VB.Net 却拿不到,但是如果用 Javasript Prompt hidden value 出来看却是有的,是不是很神奇哩?! |
|
|
|
|
|
|
|
发表于 30-1-2007 08:45 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 30-1-2007 11:43 PM
|
显示全部楼层
如果我没看错,如goatstudio 所说,
你用Request.Form 应该可以拿到你的value,
别用hidBckgImg.value |
|
|
|
|
|
|
|
发表于 31-1-2007 01:22 AM
|
显示全部楼层
原帖由 smallsotong 于 30-1-2007 06:23 PM 发表
不是的,我的例子是,当我按 Submit Button, 整个 page 重新 load 过... 那时候我的 value 才出现,
我之前说有一个 Validation Function - uValid() 吗? 如果有错误,它 Return 回去 (Page.IsPostBack 变 ...
不太明白你在说什么...
可以的话就把全部 code 放上来... |
|
|
|
|
|
|
|

楼主 |
发表于 31-1-2007 10:51 AM
|
显示全部楼层
原帖由 lovefoe 于 30-1-2007 08:45 PM 发表
我还是第一次看到有人这样写code....
哈哈,抱歉,我是 .Net 新手。
原帖由 WuSheng 于 30-1-2007 11:43 PM 发表
如果我没看错,如goatstudio 所说,
你用 Request.Form 应该可以拿到你的value,
别用hidBckgImg.value
请问要怎样使用 Request.Form 来拿 value 呢?
我在 uValid() Function 之后,Prompt 它出来 value 也是空的,
还是我的方法不对?请指教一下。
原帖由 goatstudio 于 31-1-2007 01:22 AM 发表
不太明白你在说什么...
可以的话就把全部 code 放上来...
好,我就把 code 放上来,不过不是全部,只是部分我写的而已。
因为其他的大都被我的 Leader hide 去 DLL 了,我无能为力。。。
<%@ Page Language="VB" MasterPageFile="~/_Template/MasterPage.master"
Title="Content Management" AutoEventWireup="false" %>
<%@ MasterType VirtualPath="~/_Template/MasterPage.master"%>
<asp: Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<ajax:ajaxpanel ID="Ajaxpanel1" runat="server">
<table border="0" width="100%" cellpadding="1" cellspacing="0">
<tr><td colspan="4" class="sec">Create Article</td></tr>
<tr><td colspan="4">
<asp:TextBox runat="server" TextMode="MultiLine"
style="width:99%;height:50;"
id="txtContent"></asp:TextBox></td></tr>
<tr><td colspan="4" align="center">
<input type="hidden" id="hidBckgImg" runat="server" />
<input type="button" id="oRender" value="Click" style="display:none;" />
<asp:Button ID="btnSubmit" runat="server" Text="Create"
On Click="CreateArticle" CssClass="button" />
</td></tr></table>
<script type="text/javascript" language="javascript1.2">
editor_generate('ctl00$ContentPlaceHolder1$txtContent');
WriteMenuItems('ctl00$ContentPlaceHolder1$txtContent');
</script>
</ajax:ajaxpanel>
</asp: Content>
<script runat="server" type="text/VB" >
Protected Sub Page_Load(ByVal s As Object, ByVal e As EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
ReBindField()
End If
insertJS()
End Sub
'3rd Part Javasript
Sub insertJS()
Dim sJS As String
sJS = "_editor_url = ""../CMAdmin/"";" + vbCr + _
"_editor_field = """";" + vbCr + _
"var win_ie_ver = parseFloat(navigator.appVersion.split(""MSIE"" )[1]);" + vbCr + _
"if (navigator.userAgent.indexOf('Mac') >= 0) { win_ie_ver = 0; }" + vbCr + _
"if (navigator.userAgent.indexOf('Windows CE') >= 0) { win_ie_ver = 0; }" + vbCr + _
"if (navigator.userAgent.indexOf('Opera') >= 0) { win_ie_ver = 0; }" + vbCr + _
"if (win_ie_ver >= 5.5) {" + vbCr + _
"document.write('<scr' + 'ipt src=""../JavaScript/editor.js"" ');" + vbCr + _
"document.write(' language=""Javascript1.2""></scr' + 'ipt>');" + vbCr + _
"} else { document.write('<scr'+'ipt>function editor_generate() { return false; }</scr'+'ipt>'); }" + vbCr + _
"var MyBgColor ='#FFFFFF';" + vbCr + _
"var MyBgImg ='';" + vbCr
Master.CmLib.addJSBlock("JsCMEditor", sJS, Me)
End Sub
Sub CreateArticle(ByVal sender As Object, ByVal e As System.EventArgs)
'Blank content is shown by vb.net & javascript without oRender is clicked.
Master.sendJS("document.all.oRender.click();" )
'Store background image name as hidden value, which return by editor.
Master.sendJS("if (!MyBgImg == """" ) { document.getElementById('" + hidBckgImg.ClientID + "').value = MyBgImg; }" )
If Not uValid() Then
Return
End If
'Check value by using javascript Alert
Master.sendJS("alert(document.getElementById('" + hidBckgImg.ClientID + "').value)" )
'Check value by using .Net Alert
Master.sendAlert("1=" + hidBckgImg.Value)
Master.sendAlert("Request=" + Request.Form("hidBckgImg" )
uInsert()
End Sub
'Validation of form field
Function uValid() As Boolean
With Master
If .CmLib.isEmpty(txtContent.Text) Then
.sendAlert("Content is empty.", txtContent)
Return False
End If
End With
Return True
End Function
'Record inserting
Sub uInsert()
Dim aryCol() As String
Dim aryVal() As Object
Dim sBckgImag As String = hidBckgImg.Value
If sBckgImag <> "" Then
sBckgImag = sBckgImag.Substring(sBckgImag.LastIndexOf("/ " + 1)
End If
Master.showInfo("2=" + sBckgImag)
Exit Sub
aryCol = New String() {"Body/s", "dateCreated", "ImagePath/s"}
aryVal = New Object() {txtContent.Text, "getdate()", sBckgImag.ToString}
Master.Abs.insert("BulletInMaster", aryCol, aryVal)
ReBindField()
Master.showInfo("Bulletin created successfully!" )
End Sub
'Bind data
Sub ReBindField()
txtContent.Text = ""
End Sub
</script>
[ 本帖最后由 smallsotong 于 31-1-2007 10:55 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 31-1-2007 02:32 PM
|
显示全部楼层
如果你是从hidBckgImg.value 来拿value的,
你可以用Request.Form("hidBckgImg")
[ 本帖最后由 WuSheng 于 31-1-2007 02:38 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 1-2-2007 01:40 AM
|
显示全部楼层
你的 code 有点问题.
首先, 为什么 .Net 拿不到你的 hidBckgImg 的 value, 为什么 javascript 拿到. 你的 hidBckgImg 已经设定 runat=server, 那么 .Net 会等到完全执行好你的 Page_Load -> CreateArticle 才可以知道你的 hidBckgImg 里有什么. 相反, javascript 可以马上知道是因为它是直接执行的. 这是我唯一可以想到的解释.
我建议你, 既然你已经把 hidBckgImg 设成 runat=server, 基本上你不需要 javascript 来为它 assign value, 可以直接 assign. 这应该会解决你的问题. 先试试吧... 不可以的话再想过.  |
|
|
|
|
|
|
|

楼主 |
发表于 5-2-2007 03:04 PM
|
显示全部楼层
原帖由 WuSheng 于 31-1-2007 02:32 PM 发表
如果你是从hidBckgImg.value 来拿value的,
你可以用Request.Form("hidBckgImg" )
呵呵,这个我已经尝试过来了,拿不到的,呜呜。。。
原帖由 goatstudio 于 1-2-2007 01:40 AM 发表
你的 code 有点问题.
首先, 为什么 .Net 拿不到你的 hidBckgImg 的 value, 为什么 javascript 拿到. 你的 hidBckgImg已经设定 runat=server, 那么 .Net 会等到完全执行好你的 Page_Load -> CreateArticle才可以知道你的 hidBckgImg 里有什么. 相反, javascript 可以马上知道是因为它是直接执行的. 这是我唯一可以想到的解释.
我建议你, 既然你已经把 hidBckgImg 设成 runat=server, 基本上你不需要 javascript 来为它 assign value, 可以直接 assign. 这应该会解决你的问题. 先试试吧... 不可以的话再想过.
对咯对咯,对你的解释我也是这样子想,
可是没办法的是,我只可以从javascript得到这个Value,
就好像我一开始就说的那样:
我被迫使用的是 3rd Party 的 JavascriptCode,它会 return 我一个 value,然后我也只好使用Javascript把它Store去一个Hidden里。。。救我!请救我! |
|
|
|
|
|
|
|

楼主 |
发表于 8-2-2007 03:51 PM
|
显示全部楼层
哈哈哈。。。让我先大笑三声。。。。
问题终於都让我给解决掉了 
之前因为是 3rd Party Code 所以不怎么希望去改动它,
最后还是逼于无奈之下,稍微改了一下就把事情给解决了,真是他妈的 &^%&(*$##&*($$&()(*
之前的努力就当作学习到新的东西好了(安慰自己一下)。
多谢曾经给过意见的众各位,我去也~~~~~ 
[ 本帖最后由 smallsotong 于 8-2-2007 05:24 PM 编辑 ] |
|
|
|
|
|
|
| |
本周最热论坛帖子
|