首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC中清除页面上的文本框字段

在MVC中清除页面上的文本框字段
EN

Stack Overflow用户
提问于 2011-02-03 22:13:23
回答 4查看 63.6K关注 0票数 11

由于某些原因,本应是一个简单的问题却把我难倒了。我是MVC的新手,所以这应该可以解释。

我试图在输入提交后清除页面上的所有字段。

我看过下面的示例中使用的代码,但不知道该放在哪里。我在我的PersonModel.vb中尝试了一下,它抛出了错误。我在我保存subs和函数的存储库中尝试了一下,它每次都会在单词ModelState和ValueProvierResult上抛出错误。

代码语言:javascript
复制
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture))

有人能为我提供一些建议,让我清除页面上的字段(文本框)吗?我是MVC的新手,需要一些帮助。

谢谢

LW

这是代码……

代码语言:javascript
复制
<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)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-03 22:35:53

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

编辑:

下面是一些示例代码:

代码语言:javascript
复制
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)传递回您的视图,然后您的视图将选取此模型并显示其属性。

例如,如果我有一个接受名字和姓氏的页面,当我发布时,我想将其添加到数据库中,但随后返回相同的视图,但对于我的下一个请求是空的,我的代码将如下所示:

代码语言:javascript
复制
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);
}
票数 48
EN

Stack Overflow用户

发布于 2012-12-10 12:05:54

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

代码语言:javascript
复制
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);
}
票数 5
EN

Stack Overflow用户

发布于 2011-02-03 23:49:21

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

代码语言:javascript
复制
$(document).ready(function(){
    $("input").each(function(){
         $(this).val("");
    });
});

也许可以把它包装成某种形式的Razor代码。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4887192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档