我是ASP.NET MVC的新手,我正在尝试验证文本框。基本上,如果用户输入小于2或非数字,我如何才能显示错误。这是我想要关注的tutorial。
我的代码如下。
创建视图:
<%= Html.ValidationSummary()%>
<%= using (HtmlBeginForm()){%>
<div class="half-col">
<label for="Amount">Amount:</label>
<%= Html.TextBox("Amount")%>
<%= Html.ValidationMessage("Amount", "*")%>
</div>
创建控制器:
[AcceptVerbs (HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude ="ID")] Charity productToCreate)
{
//Validation
if (productToCreate.Amount < 2)
ModelState.AddModelError("Amount, Greater than 2 please");
return View(db.Donations.OrderByDescending(x => x.ID).Take(5).ToList()); //Display 5 recent records from table
}
型号:
public class Charity
{
public int ID { get; set; }
public string DisplayName { get; set; }
public DateTime Date { get; set; }
public Double Amount { get; set; }
public Double TaxBonus { get; set; }
public String Comment { get; set; }
}
错误:
CS1501方法'AddModelError'没有重载需要1个CharitySite
答案 0 :(得分:4)
您错误地将错误添加到模型状态。您可以在MSDN
上阅读有关ModelStateDictionary的更多信息AddModelError需要2个参数,因此您需要:
ModelState.AddModelError("Amount", "Greater Than 2 Please.");
话虽如此,您可以使用属性来验证模型属性,这样您就不必手动编写所有代码。以下是使用Range
属性的示例。 RegularExpression
属性也可以使用。这是一篇MSDN文章,其中包含有关不同类型属性的信息。
public class Charity
{
public int ID { get; set; }
public string DisplayName { get; set; }
public DateTime Date { get; set; }
[Range(2, Int32.MaxValue, ErrorMessage = "The value must be greater than 2")]
public Double Amount { get; set; }
public Double TaxBonus { get; set; }
public String Comment { get; set; }
}
另外作为旁注,您所关注的教程适用于MVC 1&amp; 2。除非你必须使用/学习。我建议您按照MVC 5 here 的教程进行操作。
答案 1 :(得分:1)
更改此行:
ModelState.AddModelError("Amount, Greater than 2 please");
为:
ModelState.AddModelError("Amount ", "Amount, Greater than 2 please");
第一个参数是要验证的模型的成员;它可以是一个空字符串,仅表示与字段无关的错误。通过指定Amount字段,如果您使用所有客户端验证部分,则在内部使用它来突出显示错误字段(控件应该添加input-validation-error CSS类)。
答案 2 :(得分:1)
(*(E1)).E2
需要2个参数,而不是1.链接到MSDN ModelStateDictionary.AddModelError Method。
ModelState.AddModelError
答案 3 :(得分:0)
if (productToCreate.Amount < 2)
ModelState.AddModelError("Amount", "Greater than 2 please");