Как очистить текстовые поля, определенные с помощью HTML-помощников MVC - PullRequest
4 голосов
/ 10 августа 2010

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

В этот момент я хочу, чтобы текстовые поля «add» были очищены.Я думаю, что такое поведение ожидается большинством пользователей.Элемент был добавлен;теперь текстовые поля должны быть пустыми, готовыми для ввода следующего элемента.

Однако я не могу очистить их, когда использую Html-помощники, например, Html.Textbox (...).Мне нравятся эти элементы управления из-за того, как они «запоминают» ввод в случае ошибки ввода.Однако, в отличие от элементов управления веб-формами, вы не можете установить их программно.Они продолжают сохранять значения, пока пользователь не введет что-то другое.

Есть ли способ обойти это поведение?Я думал очистить их в javascript, но я не хочу этого делать, если есть какие-либо ошибки.

ОБНОВИТЬ часть кода;Одно из моих текстовых полей в представлении:

<h6 style="margin-top: 0px">Add custom email template:</h6>
<div style="margin-top: 10px">
<div class="label">Name:</div>
<%= Html.TextBox("addName", "", new { @class="formtext", style="width: 400px" })  %>
<div class="alerttext"><%= Html.ValidationMessage("addName") %></div>
</div>

Класс, который я использую для привязки модели:

public class ManageEmailTemplatesSubmittedData
{
    [RegularExpression(RegExpressions.templateNameRestrict, ErrorMessage="Names should begin with a character and consist of only characters and numbers")]
    public string addName { get; set; }

    [RegularExpression(RegExpressions.freeTextRestrict, ErrorMessage = "Invalid entry; please omit unusual characters")]
    public string addDescription { get; set; }

    [RegularExpression(RegExpressions.freeTextRestrict, ErrorMessage = "Invalid entry; please omit unusual characters")]
    public string addSubject { get; set; }

    [RegularExpression(RegExpressions.freeTextRestrict, ErrorMessage = "Invalid entry; please omit unusual characters")]
    public string addTemplate { get; set; }

    public string templates { get; set; }

    [RegularExpression(RegExpressions.templateNameRestrict, ErrorMessage = "Names should begin with a character and consist of only characters and numbers")]
    public string editName { get; set; }

    [RegularExpression(RegExpressions.freeTextRestrict, ErrorMessage="Invalid entry; please omit unusual characters")]
    public string editDescription { get; set; }

    [RegularExpression(RegExpressions.freeTextRestrict, ErrorMessage = "Invalid entry; please omit unusual characters")]
    public string editSubject { get; set; }

    [RegularExpression(RegExpressions.freeTextRestrict, ErrorMessage = "Invalid entry; please omit unusual characters")]
    public string editTemplate { get; set; }
}

Мое действие:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult CustomEmails(SubmitButtons buttons, ManageEmailTemplatesSubmittedData data)
    {
        bool saved = false;
        string selectedTemplate = data.templates;
        if (ModelState.IsValid)
        {
            ButtonStyles buttonStyles = ButtonStylesCreator.GetSelectListButtonStyles(rc.persistedData.loggedInUser.userType);
            Notification notification = new Notification(rc);
            if (buttons.addTemplate == buttonStyles.addEmailTemplateButtonValue)
            {
                // add an email template
                notification.SaveCustomTemplate(data.addName, data.addName, data.addTemplate, data.addSubject, data.addDescription);
                saved = true;
            }
            else if (buttons.saveTemplate == buttonStyles.saveTemplateValue)
            {
                // update an email template
                notification.SaveCustomTemplate(data.templates, data.editName, data.editTemplate, data.editSubject, data.editDescription);
                selectedTemplate = "";
                saved = true;
            }
        }

        ConfigureEmailsModelBuilder builder = new ConfigureEmailsModelBuilder(rc, rc.persistedData.loggedInUser.userID, selectedTemplate, true, saved);
        return View(builder.Build());
    }

ConfigureEmailsModelBuilder создаетмодель представления, которая включает SelectList, который является выпадающим списком элементов, которые были добавлены.(Представление строго типизировано для типа, созданного builder.Build).

Ответы [ 2 ]

6 голосов
/ 10 августа 2010

HTMLHelper сначала смотрит на ModelState и ViewData, чтобы увидеть, соответствуют ли какие-либо значения их ключу, а затем, наконец, использует любое значение, которое вы им предоставляете.

Если вам нужно сбросить значение текстового поля, вам также необходимо очистить запись ModelState с помощью соответствующего ключа.Другой альтернативой является перенаправление на ту же страницу вместо простого рендеринга представления с помощью JavaScript или MVC.

4 голосов
/ 06 декабря 2011

Это работает для меня в журнале сайта MVC3 на странице.

ModelState.Clear();
model.UserName = string.Empty;
model.Password = string.Empty;
ModelState.AddModelError("", "The user name or password provided is incorrect.");

Это очистит текстовые поля для входа, используемые для пароля и имени пользователя, и сохранит все ошибки модели.

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