Невозможно получить значение ввода даты C # Веб-формы - PullRequest
0 голосов
/ 29 мая 2018

Вот что я вижу, когда я делаю e.Item.FindControl для TextBox. Я пытаюсь получить значение для

. У меня есть 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 и добавление его только приводит к тому, что оно все равно равно нулю.

Буду признателен за любые предложения. Я тяну свои волосы часами.

Соответствующий код дляФорма обновления ниже.Обратите внимание, что все это содержится в панели обновлений

<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;
        }
    }

Редактировать: Решается путем отключения ввода даты и использования обычного текстового поля, а затем выполняет следующую функцию JS onkeyup

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);
        }
    }
}

1 Ответ

0 голосов
/ 29 мая 2018

Возможно, лучше использовать объект-отправитель, чем объект EventArgs.

var x = ((TextBox)sender).Text;

Но вы можете получить доступ к элементу управления напрямую (или должны иметь возможность).

var x = editArrivalFrom.Text;

А чтобы получить из формы, используйте правильное имя переменной:

var x = Request.Form[editArrivalFrom.ClientID];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...