格式为runat=server的Javascript验证

格式为runat=server的Javascript验证,javascript,c#,asp.net,Javascript,C#,Asp.net,我一般不熟悉.NET和web开发。我创建了一个表单来收集用户的评论和/或文件附件。一切正常,但我想添加客户端验证,但这样做失败。使用Chrome的开发工具,我可以看到javascript被执行,但第一条语句失败,它说“无法读取未定义的属性值”。如果我删除runat=“server”属性,它可以正常工作,但我无法再从代码隐藏中访问数据 那么,我有哪些选项可以让javascript工作呢?或者我是否打算以错误的方式保存数据 aspx页面: <form id="commentForm" name

我一般不熟悉.NET和web开发。我创建了一个表单来收集用户的评论和/或文件附件。一切正常,但我想添加客户端验证,但这样做失败。使用Chrome的开发工具,我可以看到javascript被执行,但第一条语句失败,它说“无法读取未定义的属性值”。如果我删除runat=“server”属性,它可以正常工作,但我无法再从代码隐藏中访问数据

那么,我有哪些选项可以让javascript工作呢?或者我是否打算以错误的方式保存数据

aspx页面:

<form id="commentForm" name="commentForm" runat="server" enctype="multipart/form-data" method="post" onsubmit="return validateCommentForm()">
    <p>Add Comment</p>
    <textarea id="Comment" name="Comment" rows="4" class="with-100" runat="server" />

    <input id="FileAttachment" type="file" runat="server" />

    <input type="submit" id="SaveComment" class="red-button" value="Submit" />
</form>
c#:


提前感谢。

您可以使用jQuery,在这里您可以按照表单元素中描述的名称调用表单元素

检索值:

$("input[name='Comment']").val();
要从JavaScript更新值(如果需要):

$("input[name='Comment']").val('some Comment');
您还可以使用以下jQuery按ID进行操作(根据您的示例,这应该可以使用):

$("#Comment").val();
因此,最终的JavaScript如下所示:

function validateCommentForm()
{
    var x = $("#Comment").val();
    var y = $("#FileAttachment").val();
    if (x == '' && y == '')
    {
        alert("Either a commment or file must be supplied.");
        return false;
    }
}

我确实认为从文件输入框访问文件名有点奇怪。请参阅文件选择器jQuery。

ClientIDMode属性似乎只是ASP.NET控件的属性,而不是HTML控件的属性。因此,该解决方案不起作用。此外,我在运行时检查了页面以获取生成的ID,将现有javascript与运行时ID一起使用,但仍然不起作用。也许你可以提供一个jQuery解决方案的例子,因为我不熟悉它。呃,对不起。我刚刚重新检查,没有意识到您没有使用asp:form标记。现在我将添加jQuery示例,我仍然需要检查元素,获取运行时生成的名称,并编辑jQuery函数以使用该名称,但这个解决方案确实有效。谢谢
$("#Comment").val();
function validateCommentForm()
{
    var x = $("#Comment").val();
    var y = $("#FileAttachment").val();
    if (x == '' && y == '')
    {
        alert("Either a commment or file must be supplied.");
        return false;
    }
}