Как я могу сбросить форму asp.net после обратной передачи? - PullRequest
4 голосов
/ 30 марта 2009

Я пытаюсь после события btnCreate_OnClick сбросить форму до значения по умолчанию, как и первая страница_загрузки. Проблема в том, что после PostBack каждое текстовое поле и другие элементы управления перезагружают значение ViewState. Я не могу деактивировать viewstate из-за события сервера при выборе DropDownList. Единственный способ, который я нашел до сих пор, - это перенаправить на себя после события click, но это дважды загружает страницу и, следовательно, является плохим решением. Я попытался ViewState.Clear () и обновить UpdatePanel, но не удалось.

Я мог бы сделать цикл для всех элементов управления и установить txtXXXXX.Text == "", но я уверен, что это не лучшая идея.

Что-то вроде Page.Reset () было бы просто идеально, но его не существует.

Есть мысли о моей проблеме?

Спасибо

Ответы [ 6 ]

12 голосов
/ 30 марта 2009

Если это возможно, я обычно использую Response.Redirect, чтобы перезагрузить ту же страницу с нуля.

Первоначальный GET-запрос к странице в любом случае обычно стоит дешевле, чем последующие POST, поэтому нет особых оснований его избегать.

6 голосов
/ 31 марта 2009

Мы можем сбросить страницу формы ASP.NET с помощью всего 2 строк кода

protected void Button_Reset_Click(object sender, EventArgs e)
{
     Session["ViewState"] = null;
     Response.Redirect("/Roster/DRAC/Create.aspx");
}
2 голосов
/ 30 марта 2009

Самостоятельное перенаправление становится сложным из-за состояния просмотра.

Существует html тип ввода "reset" для кнопок, но я не уверен, что или какая-либо интеграция msft поместила в viewstate / asp.net для этого. Обычно это работает для простых форм javascript.

например:

<input type="button" value="Reset" onclick="document.<formId>.reset();">

от Google ---- ^

0 голосов
/ 05 июня 2013

Я не знаю, помогает ли это, но я изменяю имя каждого ввода в форме, для которого я хочу получить свежие значения, используя javascript перед отправкой формы, поскольку страница .net больше не может соответствовать значениям из формы в элементы управления для страницы, она перезагружает их, как будто не было обратной передачи. я также добавляю новое значение в форму, чтобы знать, какая кнопка отправила форму, и использую эту логику, чтобы решить, что загружать во все элементы управления и как, конечно, обрабатывать данные формы.

$("#Bset").children().click(function() { //all the btns click function
    $.each($("form").find("input"), function(e,v) { //could filter this to subset of inputs
        $(v).attr("name", "_" + $(v).attr("name")); // ctrl1 becomes _cntrl1
    });
    $("form").append("<input type='hidden' id='b' name='b' value='" + $(this).text() + "' />").submit();
});

затем в коде

protected void Page_Init(object sender, EventArgs e)
{
    id = int.Parse(Request.QueryString["id"]);
    bk = db.dc.getDetailBK(id).Single();
    if (Request.Form.Count > 0)
        doPostBack();
    mrl = (from a in db.dc.getMetricQTD(id, null, null, loadSavedGoals) select a).ToList();
}

Затем я могу делать в dopostback такие вещи, как обработка данных формы, взаимодействие с БД и т. Д., Которые могут изменять значения, загружаемые в mrl, и обновлять данные во входах, связанных с mrl, независимо от того, были ли они изменены или нет форма.

другой альтернативой было бы связать некоторые кнопки, чтобы использовать веб-сервис для обработки вашего взаимодействия с БД, а затем вызвать window.location для обновления страницы.

$. Аякс ({
url: "webservice / dbfunction?"
данные: {которые нажали btn, некоторые значения формы и т. д.}}
success: function () {window.location ("samepage.aspx? id = xxx");}
...
});

это также позволит избежать переадресации ответа на стороне сервера.

0 голосов
/ 30 марта 2009

В нашем случае лучшим решением для производительности было установить вручную для каждого элемента управления значение по умолчанию в событии щелчка, например:

textbox1.Text = null;
textbox2.Text = null;

Это позволяет избежать двойной загрузки страницы и цикла. Нам не нужно обновлять UpdatePanel, поскольку он выполняется перед рендерингом.

Возможно, в более сложном веб-приложении нам придется перенаправить, так как большинство людей, кажется, принимают это как решение.

Установка для каждого элемента управления значения по умолчанию лучше подходила для нашего случая.

Спасибо

0 голосов
/ 30 марта 2009

Один из способов, не обязательно идеальный, - сбросить значения до значений по умолчанию с помощью Javascript. Если это большая форма, она может быть уродливой, но избавит от необходимости делать перенаправление самостоятельно.

Вы также можете попробовать Server.Transfer вместо Response.Redirect (/ self /)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...