У меня возникла проблема с пользовательской проверкой в ASP.NET MVC. Я хочу получить условную требуемую проверку для свойства ServerName ниже. Условие заключается в том, что свойство ServerSpecific имеет значение true, тогда имя_сервера должно быть обязательным. Я использовал метод Validate для этого, но по какой-то причине этот код Vlaidate methof никогда не попадает ни в какое условие. Здесь что-то не хватает?ASP.NET MVC Custom Validation (обязательно)
public class PlatformConfigurationEditModel : IValidatableObject
{
#region Constructor
public PlatformConfigurationEditModel()
{
SettingEnabled = true;
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (ServerSpecific == true && String.IsNullOrEmpty(ServerName))
{
yield return new ValidationResult("Please provide Server Name!.");
}
}
[ScaffoldColumn(false)]
public int Id { get; set; }
[Required]
[ScaffoldColumn(false)]
public int PlatformProfileId { get; set; }
[Required]
[ScaffoldColumn(false)]
public int EnvironmentId { get; set; }
[Required]
[DisplayName("Setting Name")]
[JqGridColumnEditable(true, EditType = JqGridColumnEditTypes.Text)]
public string SettingName { get; set; }
[Required]
[JqGridColumnEditable(true, EditType = JqGridColumnEditTypes.Text)]
[DisplayName("Setting Value")]
public string SettingValue { get; set; }
[Required]
[DisplayName("Setting Enabled")]
[JqGridColumnSearchable(false)]
[JqGridColumnEditable(true, EditType = JqGridColumnEditTypes.CheckBox)]
public bool SettingEnabled { get; set; }
[DisplayName("Server Specific")]
[JqGridColumnSearchable(false)]
[JqGridColumnEditable(true, EditType = JqGridColumnEditTypes.CheckBox)]
public Nullable<bool> ServerSpecific { get; set; }
[DisplayName("Server Name")]
[JqGridColumnEditable(true, "GetServers", "Profile", EditType =
JqGridColumnEditTypes.Select)]
public string ServerName { get; set; }
[ScaffoldColumn(false)]
public Nullable<int> ServerId { get; set; }
[ScaffoldColumn(false)]
public int ProfileVersionId { get; set; }
}
}
Метод Действие контроллера
[HttpPost]
public ActionResult Add(
[ModelBinder(typeof(PlatformConfigurationEditModelBinder))]
PlatformConfigurationEditModel platformconfiguration)
{
if (ModelState.IsValid)
{
#region web binding value adjustments
if (platformconfiguration.SettingName.ToLower() == "webbinding")
{
platformconfiguration.SettingValue = ModifyWebBinding
(platformconfiguration.SettingValue);
}
#endregion
var updatedEntity = From<PlatformConfigurationEditModel>.To<PlatformConfiguration>
(platformconfiguration);
////
//// update server id
////
if (updatedEntity.ServerSpecific.HasValue && updatedEntity.ServerSpecific.Value)
{
updatedEntity.ServerId = Convert.ToInt32(platformconfiguration.ServerName);
}
_context.PlatformConfigurations.Add(updatedEntity);
_context.SaveChanges();
}
return RedirectToAction("Add");
}
Модель Binder-
public class PlatformConfigurationEditModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
var request = controllerContext.HttpContext.Request;
int environmentId;
int profileId;
int id = 0;
int pfvid;
string paramdata = request.Params["Id"];
if (!paramdata.Equals("_empty"))
{
int[] data = request.Params["id"].Split('-').Select(n => Convert.ToInt32(n)).ToArray
();
id = data[0];
profileId = data[1];
environmentId = data[2];
pfvid = data[3];
}
else
{
id = 0;
int[] extdt = request.Params["ExtData"].Split('-').Select(n => Convert.ToInt32
(n)).ToArray();
profileId = extdt[0];
environmentId = extdt[1];
pfvid = extdt[2];
}
string settingEnabled = request.Params["SettingEnabled"];
string serverSpecific = request.Params["ServerSpecific"];
string settingName = request.Params["SettingName"];
string settingValue = request.Params["SettingValue"];
string serverName = request.Params["ServerName"];
return new PlatformConfigurationEditModel
{
Id = id,
EnvironmentId = environmentId,
PlatformProfileId = profileId,
ServerSpecific = serverSpecific.ToLower() == "on" || serverSpecific.ToLower()
== "true",
SettingEnabled = settingEnabled.ToLower() == "on" || settingEnabled.ToLower()
== "true",
ServerName = serverName,
SettingName = settingName,
SettingValue = settingValue,
ProfileVersionId = pfvid
};
}
}
Вы уверены, что 'ServerSpecific == true'? –
Вы пробовали FluentValidation? http://fluentvalidation.codeplex.com/ – John
Вам нужно показать нам свой метод управления –