2010-08-09 4 views
4

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

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

Однако я не могу очистить их, когда я использую 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).

+0

Что такое параметр действия контроллера? Это типичный метод? Или используя FormVariables? – Shlomo

+0

Я использую класс, свойства которого сопоставляются с именами текстовых полей - поэтому, я думаю, вы могли бы сказать, что это типизированный метод (это то, что вы имеете в виду?) – Cynthia

+0

Однако у меня была такая же проблема, даже если я использую FormCollection - это, похоже, не имеет никакого значения. – Cynthia

ответ

5

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

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

+0

«вам также нужно очистить запись ModelState с помощью соответствующего ключа». - Как именно вы это делаете? – Cynthia

+1

ОК, я думаю, что я понял, как это сделать: ValueProviderResult abc = new ValueProviderResult ("", "", System.Globalization.CultureInfo.CurrentCulture); ModelState.SetModelValue ("addName", abc); Это как вы это сделаете? – Cynthia

+0

Кажется, что пустое поле - это было бы предпочтительным способом? – Cynthia

3

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

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

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

Смежные вопросы