我在一个类的某个字段上进行了远程验证:
[Remote("IsCityUnique", "City", AdditionalFields = "Onvan", HttpMethod = "POST", ErrorMessage = "City name isn't unique.")]
public string CityName
{
get { return _CityName; }
set
{
if (_CityName != value)
{
_CityName = value;
OnPropertyChanged("CityName");
}
}
}
private string _CityName;
在我的控制器中:
public JsonResult IsCityUnique(string Cityname)
{
....
List<City> citylist = cr.GetAll().ToList();
return Json(!citylist .Any(c => c.CityName== Cityname));
}
“IsCityUnique”将正确触发,但编辑&amp;创建是不同的。当我处于创建模式或编辑模式时,如何激活正确的方法?我想如果我可以将动作名称传递给这个方法,那么我可以管理它。但我不知道如何将动作名称传递给远程方法。否则,你能建议我一个正确的方法吗?
答案 0 :(得分:1)
使用两个视图模型,每个模型都有一个不同的属性名称及其适用的远程验证方法。这是为每个视图简单地使用视图模型的众多原因中的另一个。因此,您应该拥有“创建”和“编辑”的视图模型。
答案 1 :(得分:1)
因此,虽然我仍然建议使用单独的ViewModel进行编辑和创建,这比仅使用远程验证具有更多架构优势,但应能够使用AdditionalFields
执行您想要的操作属性,您似乎在属性中使用但不在验证处理程序中使用。
我无法对此进行测试,但如果真的希望以这种方式进行测试,那么您可以执行以下操作:
到ViewModel添加:
public bool IsEditing { get; set; }
当您进行编辑操作时,请将此设置为true(并在创建操作时设置为false)。
[Remote("IsCityUnique", "City", AdditionalFields = "IsEditing", HttpMethod = "POST", ErrorMessage = "City name isn't unique.")]
public string CityName { get; set; }
在您看来,您可能需要呈现@Html.HiddenFor(m=>m.IsEditing)
,然后您的验证处理程序应该变为:
public JsonResult IsCityUnique(string Cityname, bool IsEditing)
{
if(editing) { /* Do editing Logic */ }
else { /* Do other logic. */ }
}
像这样的东西应该工作,但我现在无法测试它。但你真的可能更好地观察关注点的分离,并弄清楚如何在编辑和创建域对象之间划分责任。