Effacement des champs de zone de texte sur une page dans MVC
-
28-10-2019 - |
Question
Ce qui devrait être un problème simple me surprend pour une raison quelconque.Je suis nouveau sur MVC, donc cela devrait expliquer cela.
J'essaie d'effacer tous les champs d'une page après la saisie d'un envoi.
J'ai vu le code ci-dessous utilisé dans des exemples mais je ne sais pas où le mettre.Je l'ai essayé dans mon PersonModel.vb et cela génère des erreurs.Je l'ai essayé dans mon référentiel où je garde mes sous-marins et mes fonctions et il jette des erreurs à chaque fois sur le (s) mot (s) ModelState et ValueProvierResult.
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture))
Quelqu'un peut-il me conseiller de vider les champs (zones de texte) d'une page?Je suis très nouveau sur MVC et pourrais utiliser un peu d'aide.
Merci
LW
Voici le 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)
La solution
Bonjour, vous devriez pouvoir utiliser: ModelState.Clear()
et lorsque vous retournerez la vue, toutes les données précédemment saisies seront effacées.
Modifier:
Voici un exemple de 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();
}
Mise à jour 2:
Dans votre code, vous effacez le ModelState mais vous renvoyez le Model (vous l'avez appelé m) à votre vue et votre vue sélectionne alors ce modèle et affiche ses propriétés.
Si par exemple j'ai une page qui accepte un prénom et un nom et quand je poste je veux l'ajouter à une base de données mais ensuite retourner la même vue mais vide pour ma prochaine requête mon code ressemblerait à quelque chose comme:
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);
}
Autres conseils
Est-il possible que vous puissiez utiliser jQuery et faire quelque chose comme
$(document).ready(function(){
$("input").each(function(){
$(this).val("");
});
});
Et peut-être envelopper cela dans une sorte de code Razor affiché sous forme de formulaire.
Ou si ModelState était valide, vous pouvez simplement rediriger vers Get Action comme ceci:
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);
}
dans Jquery
$("#btnID").click(function () {
$("input[type=text]").val("");
});
modelstate.clear()
après une soumission réussie