2012-06-21 51 views
0

我有一个容器和嵌套的viewmodels和使用EditorFor呈现嵌套的viewmodels,我想要验证添加到一个viewmodel(ConcreteViewModelA :: prop3)属性之一的remoteAttribute。但是,在验证Controller操作方法中,我所得到的都是null。我试过使用Validate([Bind(Prefix =“item”)] string prop3),但仍然返回为NULL。有任何想法吗?RemoteAttribute与前缀

public class SomeContainer 
{ 
    public List<ISomethingViewModel> SomeViewModels { get; set; } 
} 

public class ConcreteViewmodelA : ISomethingViewModel 
{ 
    public int prop1 { get; set; } 
    public int prop2 { get; set; } 
    [Remote("Validate", "RemoteValidation")] 
    public string prop3 { get; set; } 
} 

public class ConcreteViewModelB : ISomethingViewModel 
{ 
    public int prop1 { get; set; } 
    public int prop2 { get; set; } 
} 

public interface ISomethingViewModel 
{ 
    int prop1 { get; set; } 
    int prop2 { get; set; } 
} 

查看:

@model test.Models.SomeContainer 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
    <p>Begin here</p> 
    foreach (var item in Model.SomeViewModels) 
    { 
     @Html.EditorFor(x => item) 
    }   
} 
+0

我能得到这个利用工作:公共JsonResult验证([绑定( Prefix =“item”)] ConcreteViewmodelA vm3) – user965160

回答

2

尝试定义视图模型:

public class MyViewModel 
{ 
    public string Prop3 { get; set; } 
} 

然后:

public ActionResult Validate([Bind(Prefix = "item")] MyViewModel model) 
{ 
    return Json(
     !string.IsNullOrEmpty(model.Prop3), 
     JsonRequestBehavior.AllowGet 
    ); 
} 
0

检查与萤火虫。你的URL请求看起来像这样Validate?item.prop3=

所以,你可以做这样的事情来读取值

public ActionResult Validate(string prop3) 
    { 
     string prop3Val = Request.QueryString["item.prop3"].ToString(); 

     //your operations with prop3Val 
     return Json(prop3Val, JsonRequestBehavior.AllowGet); 
    } 

enter image description here

+0

是的,萤火虫显示URL为:[link]验证?item.prop3 = hello – user965160