2016-03-26 24 views
1

Ben IssueQty boş değilse IsSaving ardından IssueQty boş olabilir işaretlenirse Bu, IssueQty ve IsSaving olarak iki özellik içerirÖzel Doğrulama Modeli

public class GroupedIssueData 
{ 

    [Range(0, double.MaxValue, ErrorMessage = "Please enter valid number")] 
    public double IssueQty { get; set; } 

    public double ReqQty { get; set; } 

    public bool isSavings { get; set; } 
} 

olarak model daha sonra IsSaving olabilir yaşıyorum boşluk bırak. Nasıl bu

Benim Görünüm

<td> 
    @Html.DisplayFor(m => m.MaterialData[i].ReqQty) 
    @Html.HiddenFor(m => m.MaterialData[i].ReqQty) 
</td> 
<td>@Html.TextBoxFor(m => m.MaterialData[i].IssueQty, new { style = "width:70px" })@Html.ValidationMessageFor(m => m.MaterialData[i].IssueQty)</td> 
<td class="text-center">@Html.CheckBoxFor(m => m.MaterialData[i].isSavings)</td> 

olduğunu doğrulamak Ve Denetleyici Modeli geçerli değilse ben yönlendirmek nasıl

public async Task<ActionResult> GetWorkOrderMaterialDetails(IssueEntryModel m) 
{ 
    if (!ModelState.IsValid) 
    { 
     // redirect 
    } 
    var model = new IssueEntryModel(); 
} 

olduğunu olabilir. Aynı denetleyiciye yönlendirmem gerekiyor mu? Girilen verileri korumak istiyorum.

Benim Görünüm

+0

ipucu olabilir /) '[RequiredIfTrue]' veya benzer doğrulama özniteliği (veya kendi yazınız) –

cevap

0

Özel bir doğrulama örn yapabilir bu

`

[Required] 
     [Range(18, 100, ErrorMessage = "Please enter an age between 18 and 50")] 
     public int Age { get; set; } 


    [Required]   
    [StringLength(10)] 
    public int Mobile { get; set; }    

    [Range(typeof(decimal), "0.00", "15000.00")] 
    public decimal Total { get; set; } ` 

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

Validation to the Model

Custom Validation Data Annotation Attribute

0

deneyin

How to validate one field related to another's value in ASP .NET MVC 3

public class RequiredIfOtherFieldIsNullAttribute : ValidationAttribute,  IClientValidatable 
{ 
private readonly string _otherProperty; 
public RequiredIfOtherFieldIsNullAttribute(string otherProperty) 
{ 
    _otherProperty = otherProperty; 
} 

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    var property = validationContext.ObjectType.GetProperty(_otherProperty); 
    if (property == null) 
    { 
     return new ValidationResult(string.Format(
      CultureInfo.CurrentCulture, 
      "Unknown property {0}", 
      new[] { _otherProperty } 
     )); 
    } 
    var otherPropertyValue = property.GetValue(validationContext.ObjectInstance, null); 

    if (otherPropertyValue == null || otherPropertyValue as string == string.Empty) 
    { 
     if (value == null || value as string == string.Empty) 
     { 
      return new ValidationResult(string.Format(
       CultureInfo.CurrentCulture, 
       FormatErrorMessage(validationContext.DisplayName), 
       new[] { _otherProperty } 
      )); 
     } 
    } 

    return null; 
} 

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
{ 
    var rule = new ModelClientValidationRule 
    { 
     ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()), 
     ValidationType = "requiredif", 
    }; 
    rule.ValidationParameters.Add("other", _otherProperty); 
    yield return rule; 
} 

}

Ve bu gibi kullanabilirsiniz: RequiredIfOtherFieldIsNullAttribute gibi burada açıklanan

[RequiredIfOtherFieldIsNull("IsSavings")] 
public double IssueQty { get; set; } 
[RequiredIfOtherFieldIsNull("IssueQty")] 
public bool IsSavings { get; set; } 
0

Kullanım IValidatableObject

Ancak durumunuz: IsSaving işaretlenirse daha sonra IssueQty sonra IsSaving biraz kafa karıştırıcı boş bırakılabilir boş değilse sueQty, boş olabilir, ancak bu (http://foolproof.codeplex.com bir [hatasız içeriklere] kullanın size zaten

public class GroupedIssueData : IValidatableObject 
{ 
    [Range(0, double.MaxValue, ErrorMessage = "Please enter valid number")] 
    public double IssueQty { get; set; } 

    public double ReqQty { get; set; } 

    public bool isSavings { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (!isSavings && IssueQty == 0) 
     { 
      yield return new ValidationResult("Error Message"); 
     } 
    } 
} 

public async Task<ActionResult> GetWorkOrderMaterialDetails(IssueEntryModel m) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(m); 
     // redirect 
    } 

} 
+0

Teşekkürler, Verileri kaybetmeden doğrulama sonuçlarını göstermek için nasıl yönlendirilir. Aynı kontrolör veya farklı kontrolör ile geri dönmem gerekiyor mu? – Techonthenet

+0

@Techonthenet lütfen düzenlemelerimi kontrol edin – brykneval

İlgili konular