2010-08-09 6 views
4

이 간단한 작업을 수행하는 방법을 알 수 없습니다. 내 페이지는 사용자가 목록에 항목을 추가하기 위해 작성할 수있는 일련의 텍스트 상자를 포함합니다. 그런 다음 항목이 드롭 다운 목록에 나타납니다.MVC HTML 도우미로 정의 된 텍스트 상자를 지우는 방법

그 시점에서 "추가"텍스트 상자를 지우고 싶습니다. 이것은 대부분의 사용자가 예상하는 동작입니다. 항목이 추가되었습니다. 이제 텍스트 상자가 비어 있어야 다음 항목을 입력 할 수 있습니다.

그러나 Html.Textbox (...)와 같이 Html 헬퍼를 사용하고있을 때이를 삭제할 수 없습니다. 나는 입력 오류의 경우 입력을 "기억"하는 방식 때문에 이러한 컨트롤을 좋아합니다. 그러나 webforms 컨트롤과 달리 프로그래밍 방식으로 컨트롤을 설정할 수는 없습니다. 그들은 사용자가 다른 것을 입력 할 때까지 계속해서 값을 유지합니다.

이 문제를 해결할 방법이 있습니까? 나는 자바 스크립트에서 그들을 지우고 생각했지만, 오류가 있다면 나는 그것을하고 싶지 않아.

일부 코드가 업데이트되었습니다. 뷰 내 텍스트 상자의 하나 :

<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."); 

암호 및 사용자 이름에 사용되는 로그인 텍스트 상자가 지워지고 모델 오류가 발생합니다.

관련 문제