出于某种原因,应该是一个简单的问题。我是MVC的新手,所以应该解释一下。
我想在输入提交后清除页面上的所有字段。
我看过下面的代码在示例中使用但不知道放在哪里。我在PersonModel.vb中尝试过,它会抛出错误。我在我的存储库中尝试了它,我保留了我的子函数和函数,并且每次都会在单词ModelState和ValueProvierResult上抛出错误。
ModelState.SetModelValue("Key", new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture))
有人可以提供一些建议让我清除页面上的字段(文本框)吗?我是MVC的新手,可以使用一些帮助。
由于
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)
答案 0 :(得分:43)
您好,您应该可以使用:ModelState.Clear()
,当您返回查看时,所有先前输入的数据都将被清除。
编辑:
以下是一些示例代码:
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)传递回视图,然后您的视图将选择此模型并显示其属性。
例如,如果我有一个接受名字和姓氏的页面,当我发布时我想将它添加到数据库但是然后返回相同的视图但是为我的下一个请求清空我的代码看起来像: / p>
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);
}
答案 1 :(得分:4)
是否可以使用jQuery并执行类似
的操作$(document).ready(function(){
$("input").each(function(){
$(this).val("");
});
});
也许包装在某种形式的是Razor代码的形式。
答案 2 :(得分:4)
或者,如果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);
}
答案 3 :(得分:2)
$("#btnID").click(function () {
$("input[type=text]").val("");
});
成功提交后 modelstate.clear()