Here is what I can see when I do e.Item.FindControl for the TextBox I'm trying to get the value for
我在列表视图中有2个日期输入,我正在尝试检索它们的值,但总是得到一个空字符串。
如果我在前端设置了值,那么它会进入后面的代码,但如果我编辑该字段,则会返回原始值。
我可以毫无问题地获取和控制值。
我尝试过使用asp:TextBox和html
<asp:TextBox ID="editArrivalFrom" name="editArrivalFrom" TextMode="Date" runat="server" OnTextChanged="editArrivalFrom_TextChanged"></asp:TextBox>
<input type="date" id="editArrivalTo" name="editArrivalTo" runat="server" />
var arrivalFrom = (TextBox) e.Item.FindControl("editArrivalFrom");
if (!String.IsNullOrWhiteSpace(arrivalFrom.Text))
var arrivalTo = (HtmlInputGenericControl) e.Item.FindControl("editArrivalTo");
if (!String.IsNullOrWhiteSpace(arrivalTo.Value))
我也尝试过使用Request.Form,以下所有内容都返回null:
var test = Request.Form[arrivalFrom.UniqueID];
var test2 = Request.Form[arrivalFrom.ClientID];
var test3 = Request.Form["editArrivalFrom"];
Request.Form.AllKeys
中也没有任何输入的迹象asp控件没有显示在designer.cs文件中,只是添加它只会导致它为null。
任何建议都会非常感激,我已经把头发拉了几个小时。
表格更新的相关代码如下。请注意,所有这些都包含在更新面板中
<asp:ListView ID="MarkupRuleList" runat="server"
OnItemCommand="MarkupRuleList_OnItemCommand">
<EditItemTemplate>
<asp:LinkButton ID="btnUpdate" CssClass="lstview_record_bttn button-spacing-7" Text="Update" CommandName="Update" CommandArgument='<%# Eval("Id") %>' runat="server" />
</EditItemTemplate
protected void MarkupRuleList_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
int markupId = 0;
int.TryParse(e.CommandArgument.ToString(), out markupId);
var markup = new MarkupRuleDTO();
switch (e.CommandName)
{
case "Update":
// GetMarkupRuleFromPage contains all of the code from the top of this post
markup = GetMarkupRuleFromPage(e, markupId);
break;
}
}
编辑:通过抛弃日期输入并使用常规文本框解决,然后执行以下onkeyup JS函数
function dateInputHandler(item, event) {
// key code 8 == backspace
if (event.keyCode != 8) {
// insert forward slashes after days and months
if (item.value.length == 2 || item.value.length == 5) {
item.value = item.value + '/'
}
// remove double slashes and prevent length exceeding 10 characters
// format should be dd/mm/yyyy
if (item.value.endsWith("//") || item.value.length > 10) {
item.value = item.value.slice(0, -1);
}
}
}
答案 0 :(得分:0)
最好不要使用发送者对象而不是EventArgs对象。
var x = ((TextBox)sender).Text;
但您可以直接(或应该)访问控件。
var x = editArrivalFrom.Text;
要从表单中获取,请使用正确的变量名称:
var x = Request.Form[editArrivalFrom.ClientID];