2015-09-07 22 views
0

我正在創建一個應用程序,我有年齡範圍,體重範圍,身高範圍等,所以在這些領域我使用了兩個文本框。例如,對於年齡範圍,我將Age From和Age用於這兩個文本框等等,以用於其他屬性。但我試圖找到一種解決方案,比較年齡從和年齡到檢查年齡是否沒有比年齡大,反之亦然。要做到這一點我從下載的NuGet萬無一失,做這樣的:如何比較MVC驗證中的兩個值?

[GreaterThan("WeightFrom",ErrorMessage="Please verify the Weight Range")] 
    public string WeightTo { get; set; } 

但這驗證檢查現場爲必填字段不管是不是。因爲用戶可能根本沒有填寫這個標準,但是如果他們填寫了,我需要檢查輸入以確保Weight To大於Weight From值。所以,請告訴我如何實現這一目標。是否有其他方式來做到這一點?謝謝。

+2

並不清楚你問 - 屬性的使用確保了'WeightTo '大於'WeightFrom'的值,這似乎是你想要的,但是製作這個prope rties typeof'string'沒有任何意義 - 它們需要是數字類型,例如'int' –

+0

使它作爲字符串仍然做同樣的事情,但如果我離開這個重量範圍空白,那麼它仍然使它紅色填充。但是這些範圍字段的系統標準是可選的。 – barsan

+0

然後,你將需要懷疑你自己的驗證屬性(說)'[GreaterThanIf]' –

回答

0

如果您將「WeightTo」屬性數據類型用作int,那麼您可以使用數據註釋作爲[Range(0,100)]加權範圍。

+0

否範圍沒問題,但問題是如果我沒有在Wight範圍文本框中輸入任何值,那麼它會要求我填寫它。但要求不是這樣。要求是如果用戶填寫這個重量從和重量到文本框,然後我必須檢查重量TO是否大於重量從。 – barsan

+0

@barsan,你有沒有嘗試過讓數據類型爲空; '詮釋?'? – Silvermind

+0

我剛纔嘗試了你的建議,但仍然無法正常工作。 – barsan

0

在您的post方法中,請在那裏檢查並使用WeightTo和WeightFrom的可爲空的整數。我創建了一個DotNetFiddle這裏爲你https://dotnetfiddle.net/ci0V2I

控制器

[HttpGet] 
    public ActionResult Index() 
    { 
     return View(new SampleModel()); 
    } 


    [HttpPost] 
    public ActionResult Index(SampleModel model) 
    {  
     if(model.WeightFrom.HasValue && model.WeightTo.HasValue) 
     { 
      if(model.WeightFrom.Value < model.WeightTo.Value) 
      { 
       ModelState.AddModelError("", "Weight from most be smaller than Weight to. Please fix this error."); 
      } 
     } 

     if(!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     return View(new SampleModel()); 
    } 

型號

using System; 
using System.ComponentModel.DataAnnotations; 

namespace HelloWorldMvcApp 
{ 
    public class SampleModel 
    { 
     [Display(Name = "Weight Form")] 
     public int? WeightFrom { get; set; } 

     [Display(Name = "Weight To")] 
     public int? WeightTo { get; set; } 

     [Required] 
     [Display(Name = "Name")] 
     public string Name { get; set; } 
    } 
} 

查看

@model HelloWorldMvcApp.SampleModel 
@{ 
    Layout = null; 
} 


       @using (Html.BeginForm()) 
       { 

       @Html.ValidationSummary() 

        <div class="form-group"> 
         @Html.LabelFor(m => m.WeightFrom) 
         @Html.TextBoxFor(m => m.WeightFrom, new {@class="form-control"}) 
         @Html.ValidationMessageFor(m => m.WeightFrom) 
        </div> 

        <div class="form-group"> 
         @Html.LabelFor(m => m.WeightTo) 
         @Html.TextBoxFor(m => m.WeightTo, new {@class="form-control"}) 
         @Html.ValidationMessageFor(m => m.WeightTo) 
        </div> 

        <div class="form-group"> 
         @Html.LabelFor(m => m.Name) 
         @Html.TextBoxFor(m => m.Name, new {@class="form-control"}) 
         @Html.ValidationMessageFor(m => m.Name) 
        </div> 

        <button type="submit" class="btn btn-success submit">Save</button> 
       }