asp.net-mvc 清除 MVC 页面上的文本框字段

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4887192/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 00:50:24  来源:igfitidea点击:

Clearing text box fields on a page in MVC

asp.net-mvcfieldclear

提问by Lee

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

什么应该是一个简单的问题是出于某种原因难倒我。我是 MVC 的新手,所以应该解释一下。

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.

我在示例中看到了下面使用的代码,但不知道把它放在哪里。我在我的 PersonModel.vb 中尝试过它并抛出错误。我在我的 Repository 中尝试了它,在那里我保留了我的 subs 和函数,并且每次都会在单词 ModelState 和 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.

有人可以为我提供一些建议以清除页面上的字段(文本框)吗?我对 MVC 很陌生,可以使用一些助手。

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)

回答by lancscoder

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

您好,您应该可以使用:ModelState.Clear()当您返回查看时,所有以前输入的数据都将被清除。

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:

更新 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.

在您的代码中,您正在清除 ModelState,但是您将模型(您称之为 m)传递回您的视图,然后您的视图选择该模型并显示其属性。

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

回答by jcreamer898

Is it possible you could use jQuery and do something like

有没有可能你可以使用 jQuery 并做一些类似的事情

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

And maybe wrap that in some sort of is the form posted Razor code.

也许将其包装成某种形式的 Razor 代码。

回答by Jalali Shakib

Or if the ModelState was valid you just can Redirect back to Get Action like this:

或者,如果 ModelState 有效,您可以像这样重定向回获取操作:

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

回答by CyberNinja

in Jquery

在 jQuery 中

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

});

modelstate.clear()after successful submission

modelstate.clear()提交成功后