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
Clearing text box fields on a page in MVC
提问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()
提交成功后