Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clearing text box fields on a page in MVC

What should be a simple issue is stumping me for some reason. I am new to MVC so that should explain that.

I am trying to clear all fields on a page after a submit is entered.

I have seen the code below used in examples but dont know where to put it. I tried it in my PersonModel.vb and it throws errors. I tried it in my Repository where I keep my subs and functions and it throws errors everytime over the word(s) ModelState and ValueProvierResult.

ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture))

Can someone offer some advice for me to clear out the fields(text boxes) on a page? I am very new to MVC and could use some assistanct.

Thanks

LW

Here is the code....

<HttpPost(), MvcReCaptcha.CaptchaValidator()> _
Function Nominate(ByVal m As NominationModel, ByVal captchaValid As Boolean) As ActionResult

    Dim db = New ChampionTrees.Common.DataAccess.ChampionTreesRepository With {.UserName = "SYSTEM"}
    BindNominateDdls(db)

    Dim addPost As Boolean = False
    If (Request.Form("addNominator") <> Nothing) Then
        m.People.Add(New PersonModel With {.Indicator = PersonIndicator.Nominator})
        addPost = True
    ElseIf Request.Form("addOwner") <> Nothing Then
        m.People.Add(New PersonModel With {.Indicator = PersonIndicator.Owner})
        addPost = True
    Else
        For Each f In Request.Form.Keys
            If f.ToString.StartsWith("deletePerson") Then

                Dim idx = f.ToString.IndexOf("n")
                m.People.RemoveAt(Integer.Parse(f.ToString.Substring(idx + 1, f.ToString.Length - (idx + 1))))
                addPost = True
                Exit For

            End If
        Next
    End If

    If addPost Then

        For Each v In ModelState.Values.AsEnumerable()
            v.Errors.Clear()
        Next

        Return View(m)

    End If

    If m.Tree.Id < 0 AndAlso String.IsNullOrEmpty(m.OtherName) Then

        Dim err As String = "Either a Common, Scientific, or Other Name must be provided."
        ModelState.AddModelError("Tree.Id", err)
        ModelState.AddModelError("OtherName", err)

    End If

    If String.IsNullOrEmpty(m.Measurement.CountyForester) = _
        String.IsNullOrEmpty(m.Measurement.OtherCountyForester) Then

        Dim err As String = "A County Forester must be selected or entered (but not both)."
        ModelState.AddModelError("Measurement.CountyForester", err)
        ModelState.AddModelError("Measurement.OtherCountyForester", err)

    End If

    Dim i As Integer = 0
    For Each p As PersonModel In m.People

        If String.IsNullOrEmpty(p.EmailAddress) AndAlso _
            (p.Phone.Phone1 Is Nothing Or p.Phone.Phone2 Is Nothing Or p.Phone.Phone3 Is Nothing) Then

            ModelState.AddModelError(String.Format("People[{0}].Phone", i), "Either an E-mail Address or Phone number must be provided.")
            ModelState.AddModelError(String.Format("People[{0}].Phone.Phone1", i), "")
            ModelState.AddModelError(String.Format("People[{0}].Phone.Phone2", i), "")
            ModelState.AddModelError(String.Format("People[{0}].Phone.Phone3", i), "")
            ModelState.AddModelError(String.Format("People[{0}].EmailAddress", i), " ")

        Else

            Dim int As Integer = 0
            Dim err As Boolean = False

            If Not p.Phone.Phone1 Is Nothing AndAlso _
                            (p.Phone.Phone1.Length <> 3 Or Not Integer.TryParse(p.Phone.Phone1, Int)) Then

                ModelState.AddModelError(String.Format("People[{0}].Phone.Phone1", i), "")
                err = True
            End If
            If Not p.Phone.Phone2 Is Nothing AndAlso _
                            (p.Phone.Phone2.Length <> 3 Or Not Integer.TryParse(p.Phone.Phone2, int)) Then

                ModelState.AddModelError(String.Format("People[{0}].Phone.Phone2", i), "")
                err = True
            End If
            If Not p.Phone.Phone3 Is Nothing AndAlso _
                (p.Phone.Phone3.Length <> 4 Or Not Integer.TryParse(p.Phone.Phone3, int)) Then

                ModelState.AddModelError(String.Format("People[{0}].Phone.Phone3", i), "")
                err = True
            End If

            If err Then ModelState.AddModelError(String.Format("People[{0}].Phone", i), "Phone Number is not numeric.")

        End If

        If m.OwnershipType = Ownership.Public AndAlso _
            p.Indicator = PersonIndicator.Owner AndAlso _
            p.ParcelName Is Nothing Then
            ModelState.AddModelError(String.Format("People[{0}].ParcelName", i), "The Parcel Name field is required for public nominations.")
        End If

        i += 1

    Next

    If Not m.UseNominatorsAsOwners AndAlso _
        (From e In m.People Where e.Indicator = PersonIndicator.Owner Select e).Count = 0 Then
        ModelState.AddModelError("UseNominatorsAsOwners", "At least one Owner is required.")
    End If

    If Files.Count > 0 AndAlso Not m.ElectronicUseAgreement Then
        ModelState.AddModelError("ElectronicUseAgreement", "The Electronic Use Agreement must be agreed to.")
    End If

    If Not captchaValid Then
        ModelState.AddModelError("ReCaptcha", "You did not type the verification word correctly. Please try again.")
    End If

    If ModelState.IsValid Then

        ' load our uploads from session
        For Each f In Files
            f.Value.Viewable = m.ElectronicUseAgreement
            m.Uploads.Add(f.Value)
        Next

        ' insert the nomination into the db
        db.InsertNomination(m)

        ViewData("message") = "Nomination has been submitted"

    End If

    ModelState.Clear()
    Return View(m)
like image 322
Lee Avatar asked Feb 03 '11 14:02

Lee


People also ask

What is ModelState Clear () in MVC?

Clear() is required to display back your model object. If you are getting your Model from a form and you want to manipulate the data that came from the client form and write it back to a view, you need to call ModelState. Clear() to clean the ModelState values.

How do you clear fields after form submit in asp net?

Once the OK button of the JavaScript Alert Message Box is clicked, the form fields (data) is cleared (reset) by redirecting to the same page using JavaScript window. location function.

How do you delete a text box in asp net?

Just use textbox-id. Text=""; and it will clear the textbox text. But when we have many textbox es in a single page of form, then we have to use something better to do that and here this code comes in. So just read, understand and apply it.


1 Answers

Hi you should be able to use: ModelState.Clear() and when you return the View all previous entered data will be cleared.

Edit:

Here's some example code:

public ActionResult Index()
{
  return View();
}

[HttpPost]
public ActionResult Index(FormCollection collection)
{
  // This will clear whatever form items have been populated
  ModelState.Clear();

  return View();
}

Update 2:

In your code you are clearing the ModelState however your passing the Model (you've called it m) back to your view and your view is then picking this model and displaying its properties.

If for example I have a page which accepted a first name and last name and when I post I want to add this to a database but then return the same view but empty for my next request my code would look something like:

public ActionResult Index()
{
  return View();
}

[HttpPost]
public ActionResult Index(Person p)
{
  if (ModelState.IsValid)
  {
    // This will clear whatever form items have been populated
    ModelState.Clear();
    // Here I'm just returning the view I dont want a model being passed
    return View();
  }

  // Here I'm returning the model as there's an error and the user needs to see
  // what has been entered.
  return View(p);
}
like image 163
lancscoder Avatar answered Sep 20 '22 10:09

lancscoder