ASP.net发布一个元素名称前缀为“ct100 $”的表单

时间:2013-01-07 11:21:18

标签: c# jquery asp.net .net

我正在撰写一个网站母版页面,其中包含会员登录表单 以下是母版页的标记:

<form id="loginForm" action="account.aspx" method="POST">
<div class="div-topHead">
<input type="button" id="submitLogin" title="Login" value="Login" />
<input type="button" id="forgetPW" title="Forget password" value="?" onclick="window.open('forgetpassword.aspx','_self')" />
</div>
<div class="div-topTail">
<div class="div-login">
    <div class="row-body row-def">
    <input id="input_memID" name="input_memID" runat="server" type="text" maxlength="255" />
    </div>
    <div class="row-header row-def">
    Member ID:
    </div>
</div>
<div class="div-login">
    <div class="row-body row-def">
    <input id="input_memPW" name="input_memPW" runat="server" type="password" maxlength="255" />
    </div>
    <div class="row-header row-def">
    Password:
    </div>
</div>
</div>
</form>

及以下是发布脚本

$(function(){
    $('#submitLogin').click(function(){
        var f = $('#loginForm').get(0);
        $.post("../script/loginCheck.aspx", { "memID": f.inputID.value, "memPW": f.inputPW.value }, function(data){
            var result = JSON.parse(data);
            if(result[0] == 1){
                //Login validated
                f.submit();
            } else {
                //Login is invalid
                alert(result[1]);
            }                    
        });
    });
});

问题是,当我在浏览器上打开网站时, 文本输入字段名称会自动添加前缀“c100 $” 然后从控制台我可以看到我得到以下错误 未捕获的TypeError:无法读取未定义的属性“值”

我试图在网上查找这是怎么回事, 似乎这是.NET自动执行的操作。 然而,我找不到让我的帖子脚本有效的方法。

我不需要像没有ct100那样保留ID, 只要发布脚本可以工作 我尝试更改为f.ct100 $ input_memID等但无法正常工作

还尝试了clientIDMode =“Static”但无法使其正常工作 浏览器抱怨clientIDMode不是&lt;%PAGE%&gt;

的属性

有人可以请您告诉我该怎么办? 提前致谢!

4 个答案:

答案 0 :(得分:3)

ClientIDMode 是可以添加到各个控件的属性。

另外(来自MSDN):

  

您可以通过在站点的Web.config文件中设置pages元素来为网站中的所有页面设置ClientIDMode值。您可以在@ Page指令中为页面设置ClientIDMode值。

例如:

<div id="dvDiv" runat="server" clientidmode="Static" />

将客户端和服务器端的div名称设为“dvDiv”。

所以$("#dvDiv")在客户端可以正常工作。

关于您的上一条评论,请务必将其放在<%@ Page %>而不是<% Page %>(请注意@符号)

答案 1 :(得分:0)

您可以简单地使用此jquery选择器来获取您想要的任何元素: -

$("[id$='yourElementID']")// Select an Element whose ID ends with yourElementID

示例: -

 $("[id$='submitLogin']").click(function(){
        var f = $("[id$='loginForm']").get(0);
     ....................

See The Detailed Information here

答案 2 :(得分:0)

虽然Blachshma的答案非常合理并且可以解决您的问题,但我建议您只需取消输入中的runat="server"属性。

如果你不需要从页面代码隐藏中引用它们,我看不出你有任何真正的理由让它们作为HtmlInputText对象存在。

编辑:根据评论,如果您确实需要从代码隐藏中访问它们,那么只需将ClientIDMode更改为静态就更好了。

答案 3 :(得分:0)

如果Javascript代码包含在aspx标记中,您也可以使用

var f = $('#<%= loginForm.ClientID %>').get(0);