我正在开发一个非常简单的数据输入应用程序(在bootstrap中),使用ASP.net和VB.Net作为Visual Studio 2012 web中的代码。
假设我有以下html来获取名字:
<form id="form1" runat="server">
<div style="padding:20px">
<div class="form-group">
<label for="firstname">Firstname</label>
<input type="text" class="form-control" id="firstname" name="firstname" placeholder="" style="max-width:450px" maxlength="60" />
<small class="text-muted">Enter your first name.</small>
</div>
<button runat="server" type="submit" class="btn btn-primary" onserverclick="btnSubmit_ServerClick" >Submit</button>
</div>
</form>
以及处理其值的相应代码:
Protected Sub btnSubmit_ServerClick(sender As Object, e As EventArgs)
Dim fname As String = Request.Form("firstname").ToString
End Sub
假设我不想在我的html firstname字段中使用runat="server"
。
我看到Request.Form("firstname").ToString
仅在我设置了标记name="firstname"
时才有效。如果我只设置了id
标记(而不是name
标记),则不会将其考虑在内;在我的情况下,如果我的服务器端只有<input type="text" class="form-control" id="firstname" placeholder="" style="max-width:450px" maxlength="60" />
Request.Form("firstname")
,则返回NULL。
我也试试Request.Form
没有运气。我看到集合NameValueCollection
由仅设置name
标记的组件填充。
我的问题是,是否可以更改我的服务器代码以使用仅设置了ID的html组件?
答案 0 :(得分:2)
当您选择不使用服务器端控件时,您将继续使用Request collection方法读取值。
后面的代码只能读取发送到后端的数据。如果您在自己喜欢的浏览器的“网络”选项卡中检查了您的请求(提交表单时请求的页面),您将找到显示已发送数据的部分。由于您没有在该输入字段上设置名称,因此数据不会发送到服务器。这就是你无法阅读的原因。该ID对发送到服务器的内容没有影响。该ID仅适用于客户端使用。它&#34;工作的原因&#34;当你添加Runat =&#34; server&#34;是因为框架将信息添加到名为&#34; __ VIEWSTATE&#34;的秘密隐藏输入字段中。 (或者什么)。
最后,HTML的工作方式,当您提交表单时,所有输入元素都以name = value的形式发送,因为您省略了名称,所以不会发送任何数据。
与帖子建议下面的评论一样,您确实应该考虑使用服务器端控件(runat =&#34; server&#34;)或将名称标签添加到表单元素中。
我知道很多人不喜欢asp.net webforms(实际上我也不是粉丝),但还有其他选择 - 逻辑转变将转移到asp.net mvc代替。无论你做什么,如果你选择退出框架细节,你必须遵守html5标准。
祝你好运:)