2009-12-19 116 views
2

我有一个int错误验证问题。ASP.Net MVC错误验证

我已经验证了客户名称:

if (String.IsNullOrEmpty(CustomerName)) 
      yield return new RuleViolation("Customer Name Required", "CustomerName"); 
现在如果我想添加验证一个城市,在这种情况下,我有被保存为int类型一CityID

,所以我不能写我的if语句以同样的方式...因为没有int.IsNullOrEmpty方法。假设用户没有选择城市的下拉菜单 - 基本上没有价值的节省。

什么是最好的方式来编写我的int验证语句?

更新:这是什么,我有我的,我认为形式的样本:

<% using (Html.BeginForm()) 
    {%> 

    <fieldset> 
     <legend>Add a new customer</legend> 
     <p> 
      <label for="CustomerName">Customer Name:</label> 
      <%= Html.TextBox("CustomerName")%> 
      <%= Html.ValidationMessage("CustomerName", "*")%> 
     &nbsp;&nbsp; 
      <label for="CityID">City:</label> 
      <%= Html.DropDownList("CityID", Model.Cities as SelectList, "Select City")%> 
      <%= Html.ValidationMessage("CityID", "*")%> 
     &nbsp;&nbsp; 
      <input type="submit" value="Create New Customer" /> 
     </p> 
    </fieldset> 

<% } %> 

和我的视图模型是这样的:

public class CustomerFormViewModel 
{ 
    //Properties 
    public Customer Customer { get; set; } 
    public SelectList Cities { get; set; } 

    //Constructor 
    public CustomerFormViewModel(Customer customer) 
    { 
     CustomerRepository customerRepository = new CustomerRepository(); 
     Customer = customer; 
     Cities = new SelectList(customerRepository.FindAllCities(), "CityID", "CityName"); 
    } 
} 

回答

1

使用可空整型,

int? i = null; 
0

您可以在路由配置中设置默认值。如果您将默认值设置为您知道的值无效,那么您可以检查该值。如果您的城市编号为1到X,则将默认值设置为-1并检查。

0

如果以字符串格式获得输入,则尝试使用正则表达式来验证整数格式。

Regex rxNums = new Regex(@"^\d+$"); // Any positive decimal 
if (!rxNums.IsMatch(cityId)) 
{ 
    yield return new RuleViolation("city id Required", "cityId"); 
} 

如果您以整数格式获取值,那么您只需检查该值是否大于0。

1

一周前我有这个相同的确切要求。你可以用两种方法来解决这个问题。

1)在下拉菜单中,您将始终有“请选择”,默认值为-1。当提交表单并且没有选择城市时,则对于CityID,MVC模型将绑定-1(默认值)。因此,您可以随时检查CityID> 0 else“raise error”

2)使用c#3.0功能CityID为空的Int(int?),这意味着您的CityID也可以为null。如果没有为CityID传递值,则您的cityID将始终为空。

+0

我很感谢您的帮助,虽然我不太了解如何给“请选择”它的默认值为-1。我可以让它说“请选择”,但我不知道在哪里指定它的价值。我用我视图中的代码更新了我的问题,以显示我目前拥有的代码。 – Ben 2009-12-22 02:20:29

+0

当您创建下拉菜单时,它将具有文本和值。我始终将“值”指定为-1,将文本指定为“请选择”。提交表单时,发布的值将在您的示例中包含“-1”作为CityID。 – 2009-12-22 16:14:24