Очистка полей текстового поля на странице в MVC - PullRequest
11 голосов
/ 03 февраля 2011

То, что должно быть простым вопросом, по какой-то причине ставит меня в тупик. Я новичок в MVC, так что должен это объяснить.

Я пытаюсь очистить все поля на странице после ввода заявки.

Я видел приведенный ниже код, используемый в примерах, но не знаю, где его разместить. Я попробовал это в моем PersonModel.vb, и он выдает ошибки. Я попробовал это в своем репозитории, где я храню свои подпрограммы и функции, и он каждый раз выдает ошибки над словом (ами) ModelState и ValueProvierResult.

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

Может ли кто-нибудь дать мне совет, чтобы убрать поля (текстовые поля) на странице? Я очень новичок в MVC и могу использовать некоторую помощь.

Спасибо

1012 * LW *

Вот код ....

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

Ответы [ 4 ]

43 голосов
/ 03 февраля 2011

Привет, вы должны быть в состоянии использовать: ModelState.Clear(), и когда вы вернетесь Показать все предыдущие введенные данные будут очищены.

Edit:

Вот пример кода:

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

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

  return View();
}

Обновление 2:

В своем коде вы очищаете ModelState, однако вы передаете Модель (вы называли ее m) обратно вашему представлению, и ваше представление затем выбирает эту модель и отображает ее свойства.

Если, например, у меня есть страница, которая принимает имя и фамилию, и когда я публикую сообщение, я хочу добавить это в базу данных, но затем вернуть то же представление, но пустое для моего следующего запроса, мой код будет выглядеть примерно так:

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);
}
4 голосов
/ 10 декабря 2012

Или, если ModelState был действителен, вы можете просто перенаправить обратно на Get Action следующим образом:

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);
}
4 голосов
/ 03 февраля 2011

Возможно ли, что вы могли бы использовать jQuery и сделать что-то вроде

$(document).ready(function(){
    $("input").each(function(){
         $(this).val("");
    });
});

И, возможно, в какой-то форме это будет форма, в которой размещен код Razor.

2 голосов
/ 22 сентября 2016

в Jquery

$("#btnID").click(function () {
    $("input[type=text]").val("");

});

modelstate.clear() после успешной отправки

...