母版页正在 TextBox ID 中添加附加文本
我有一个母版页,其中包含 id 为 cpMainContent 的内容部分。 我在为大学项目创建的每个网络表单上都使用这个母版页。其中一种形式是 frmSearchPersonnel。 frmSearchPersonnel 的目的是在文本框中询问用户想要搜索的人的姓氏,然后单击搜索按钮。 TextBox 的 ID 是
txtSearchName
Search 按钮,会将 postbackUrl 传输到我命名为 frmViewPersonnel 的另一个表单。 在 frmViewPersonnel 中,我尝试使用以下代码。
NameValueCollection myRequest = Request.Form;
if(!string.IsEmptyOrNull(myRequest["txtSearchName"]))
string strSearch = myRequest["txtSearchName"];
我遇到的问题是,这没有找到任何名称为 txtSearchName 的控件。在调试时,我在 myRequest 对象中发现了这一点,
[5] "ctl00$cpMainContent$txtSearchName" string
即使当我添加文本框时,我给了它 txtSearchName 的 ID,但当呈现页面时,它会从母版页添加额外的字符串。
- 我怎样才能阻止这个?我必须使用母版页,所以不要说不使用母版页:)
- 为什么要这样做?
更新
当谷歌搜索和必应时,我发现在这种情况下我可以使用 Control.ClientID,因此请研究它。
更新 2
按照下面的建议,在控件的 html 中添加 ClientIDMode="static" 或在页面指令中添加它。它的作用是,它将 ID 保持静态到 txtSearchName 但问题是这样的,
<input name="ctl00$cpMainContent$txtSearchName" type="text" id="txtSearchName" />
这里名称仍然使用 ctl00 和我上面显示的代码,
string strSearch = myRequest["txtSearchName"]
它仍然无法工作,因为 nvc 集合可以通过索引或名称直接搜索,而不是直接通过 id 。
=============
I have a master page which has a content section with the id cpMainContent.
I am using this master page on every webform I am creating for college project. One of such form is frmSearchPersonnel. The purpose of frmSearchPersonnel is to ask user last name of the person they want to search in a textbox and then click on search button. The ID of TextBox is
txtSearchName
Search button will do postbackUrl transfer to another form which I have named frmViewPersonnel.
In frmViewPersonnel I am trying to use following code.
NameValueCollection myRequest = Request.Form;
if(!string.IsEmptyOrNull(myRequest["txtSearchName"]))
string strSearch = myRequest["txtSearchName"];
The problem I ran into is that this didn't find any control with the name of txtSearchName. While debugging I found this in myRequest object,
[5] "ctl00$cpMainContent$txtSearchName" string
Even though when I added textbox I gave it ID of txtSearchName but when page is rendered it is adding extra string from master page.
- How can I stop this? I have to use master page so don't say not to use master page :)
- Why is it doing that?
Update
While Googling and Binging I found that I can use Control.ClientID in this case so looking into it.
Update 2
As suggested below to add ClientIDMode="static" in the html of control or add it in page directive. What it does is, it keeps the ID static to txtSearchName but problem is this,
<input name="ctl00$cpMainContent$txtSearchName" type="text" id="txtSearchName" />
Here name is still using ctl00 and the code I showed above,
string strSearch = myRequest["txtSearchName"]
it still won't work because nvc collection is either searchable by index or name not the id directly.
==============
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您希望所有控件都带有
ClientIDMode="Static"
,则可以将其放在母版文件的页眉中。If you want all controls with
ClientIDMode="Static"
, you can put it in the page header of the master file.如果您要发布到使用相同母版页(在我的例子中称为 SiteMaster)的另一个页面,则文本框的名称应该相同。
如果您不发布到具有相同母版的页面,那么您是否在发布到另一个页面后根本使用文本框的视图状态?如果不是,只需将该控件设置为非 asp.net 控件:
如果您正在使用视图状态并发布到具有不同母版页的另一个页面,那么您应该使用 PreviousPage 。
If you are posting to another page that uses the same master page (called SiteMaster in my case), the name of the textbox should be same the same.
If you're NOT posting to a page with the same master, well, then are you using the viewstate for the textbox at all since you're posting to another page? If not, just make the control a non asp.net control:
If you are using viewstate and posting to another page with a different master page, well, you should use PreviousPage.
这里有点晚了。感谢
@aquinas
和@rudeovski ze bear
。有趣且好的答案。我有同样的问题,但我以不同的方式解决了它。
事实上,我使用了公共接口。
然后在两个 aspx 页面中实现
ISearch
接口,例如One.aspx
和Two.aspx
类。--One.aspx-- (我添加了 TextBox1 和 Button1 并设置 Button1.PostBackUrl="~/Two.aspx")
--Two.aspx--
Little late here. Appreciate
@aquinas
and@rudeovski ze bear
. Interesting and good answers.I'd same issue and I solved it differently.
In fact, I used a public Interface.
Then implement
ISearch
interface in two aspx page sayOne.aspx
andTwo.aspx
classes.--One.aspx-- (Where I'v added TextBox1, and Button1 and set Button1.PostBackUrl="~/Two.aspx")
--Two.aspx--
如果您尝试在回发后的代码后面访问输入元素值,而不是例如:
使用
If your try to access the input element value in code behind on post back instead of for example:
Use