11
votes

Effacement des champs de zone de texte sur une page en MVC

Quel devrait être un problème simple me résout pour une raison quelconque. Je suis nouveau à MVC afin que cela puisse expliquer cela.

J'essaie d'effacer tous les champs sur une page après la saisie d'une soumission. P>

J'ai vu le code ci-dessous utilisé dans des exemples mais ne savez pas où le mettre. Je l'ai essayé dans ma personneModel.vb et ça jette des erreurs. Je l'ai essayé dans mon référentiel où je conserve mes sous-marins et mes fonctions et cela jette des erreurs à chaque fois sur le mot modélisme et la valeurProvierresult. P>

<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)


0 commentaires

4 Réponses :


48
votes

hi vous devriez être capable d'utiliser: modelstate.clear () et lorsque vous retournez l'affichage Toutes les données saisies précédentes seront effacées.

EDIT:

Voici Quelque exemple de code: xxx

update 2:

Dans votre code, vous effacez le modèle de modèle, mais vous passez le modèle (vous l'avez appelé m) Retour à votre vue et votre vue choisit ensuite ce modèle et affiche ses propriétés.

Si, par exemple, j'ai une page qui a accepté un prénom et un nom de famille et quand je poste je veux ajouter ceci à un Base de données, mais renvoie ensuite la même vue mais vide pour ma prochaine demande, mon code ressemblerait à quelque chose comme: xxx


9 commentaires

Quand j'essaie de dire qu'il est dit "modelstate" n'est pas déclaré. Où devrais-je utiliser ce code?


Je l'ai même essayé sur la page ASPX et il est dit qu'il n'y a pas de méthode claire () pour modélistate ......


J'ai mis à jour avec un exemple de code - si vous ne comprenez toujours pas, pouvez-vous publier votre code. Merci


Je l'ai eu pour accepter ModelState.clear (). J'avais besoin d'ajouter à l'importation, mais cela n'a pas effacé le formulaire. Rien n'a changé.


Pouvez-vous publier vos contrôleurs / actions s'il vous plaît.


Voici quelques échantillons de ce que j'ai .......................................... si modélistate.isvalid alors "charge notre Télécharge de la session pour chaque F dans les fichiers F.Value.Vueillette = M.ElectronicuseAgreement m.OnectronicuseAgreement m.euploads.Ajouter (F.Value) Suivant db.insernomination (m) ViewData ("Message") = "La nomination a été soumise" fini si modélistate .Clear () Vue de retour (M)


Le code que j'ai énuméré ci-dessus est à l'intérieur d'un sous-bas où j'insère certaines données dans la base de données. Je ne pouvais que lister une partie du sous à cause des limites de l'espace ici ...


Il suffit de modifier votre question originale avec le code. Vous devriez faire modelstate.clear () dans votre résultat d'action avant de retourner votre vue.


Ça l'a eu. Je suppose que je n'avais pas besoin d'envoyer le "M" dans l'appel à la vue. J'apprécie vraiment votre aide. Merci.



4
votes

est-il possible que vous puissiez utiliser jQuery et faire quelque chose comme xxx

et peut-être peut-être que dans une sorte de type de rasoir posté.


1 commentaires

Je me suis demandé à propos de JQuery ... N'a pas encore essayé ça. J'ai envisagé du code dans l'événement surload de la page, mais pas sûr de pouvoir le faire avec MVC.



5
votes

ou si le modèle de modèle était valide, vous pouvez simplement rediriger pour obtenir une action comme celle-ci:

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

[HttpPost]
public ActionResult Index(Person p)
{
  if (ModelState.IsValid)
  {
    // do work and finally back to Get Action
    return RedirectToAction("Index");
  }

  return View(p);
}


2 commentaires

modelstate.clear () n'a pas fonctionné pour moi. Mais cela a fait.


Merci, c'est résolu mon problème RedirectToaction ("index") au lieu de la vue ();



3
votes

dans jQuery xxx

modelstate.clear () après une soumission réussie


0 commentaires