代码之家  ›  专栏  ›  技术社区  ›  Ben

ASP.NET MVC错误验证

  •  2
  • Ben  · 技术社区  · 15 年前

    我有一个int的错误验证问题。

    我对客户名称进行了验证:

    if (String.IsNullOrEmpty(CustomerName))
                yield return new RuleViolation("Customer Name Required", "CustomerName");
    

    现在,如果我想为一个城市添加验证,在本例中,我有一个cityid,它被保存为in t类型,所以我不能以同样的方式编写if语句…因为没有in t.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");  
        }
    }
    
    4 回复  |  直到 15 年前
        1
  •  1
  •   µBio    15 年前

    使用可空整数,

    int? i = null;
    
        2
  •  1
  •   Rasik Jain    15 年前

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

    1)在下拉列表中,您将始终拥有“ 请选择 “默认值为 -1个 . 提交表单且未选择城市时,则 MVC模型将绑定-1 (默认值)用于cityid。因此,您可以始终检查cityid>0是否“引发错误”

    2)使用C 3.0功能 可以为空的int(int?) 对于cityid,这意味着您的cityid也可以为空。如果没有为cityid传递值,则cityid将始终为空。

        3
  •  0
  •   Mark Ewer    15 年前

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

        4
  •  0
  •   J.W.    15 年前

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

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

    如果您得到的是整数格式的值,那么您只需检查该值是否大于0。