2017-06-19 46 views
0

我有一个Xamarin.Form应用程序,我正在使用模型状态消费一个ASP.Net Web WebAPI以在我的内部模型中进行验证。如果我得到了一个“错误的请求”我的API返回此JSON对象:Xamarin表单验证和ASP.Net WebAPI

{ 
    message: 'The request is invalid.', 
    modelState: { 
     model.**Name**: [ 
      "The name is empty" 
     ] 
    } 
    } 

所以,我想简化我的UI工作来读取结果,我的问题是:我该怎么做才能使用这个对象在我的UI中显示错误?或者Xamarin表单是否有像ASP.NET MVC Validator @ Html.ValidationMessageFor(model => model.Name)的任何帮助程序,它可以自动显示UI中的错误?

谢谢!

回答

1

您可以创建控件的行为,如下面的一个

public class EmailValidatorBehavior : Behavior<Entry> 
    { 
     const string emailRegex = @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + 
      @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$"; 


     protected override void OnAttachedTo(Entry bindable) 
     { 
      bindable.TextChanged += HandleTextChanged; 
      base.OnAttachedTo(bindable); 
     } 

     void HandleTextChanged(object sender, TextChangedEventArgs e) 
     { 
      bool IsValid = false; 
      IsValid = (Regex.IsMatch(e.NewTextValue, emailRegex, RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250))); 
      ((Entry)sender).TextColor = IsValid ? Color.Default : Color.Red; 
     } 

     protected override void OnDetachingFrom(Entry bindable) 
     { 
      bindable.TextChanged -= HandleTextChanged; 
      base.OnDetachingFrom(bindable); 
     } 
    } 

使用此行为在XAML如下

添加命名空间为您的行为

xmlns:local="clr-namespace:Mynamespace.Behaviors" 

添加行为入门

<Entry x:Name="txtEmail" Placeholder="Enter Your Password" > 
     <Entry.Behaviors> 
     <local:EmailValidatorBehavior /> 
     </Entry.Behaviors> 
    </Entry> 

上述行为将验证电子邮件,并在电子邮件无效时更改文本框的颜色。就像你可以创建更多的行为

+0

你能给我更多关于这方面的信息吗?那么XAML呢? –

+0

谢谢你的回答!但我的意思是,我有一个所有型号的PLC,对于每个型号的属性,我都有一个数据符号用于在我的web api中进行验证。我怎样才能在每个模型中使用Xamarin表单中的验证[见本文](https://msdn.microsoft.com/en-us/library/ee256141(v = vs.98).aspx)? –