带有前缀的RemoteAttribute

时间:2012-06-21 21:59:48

标签: c# asp.net-mvc-3

我有一个容器和嵌套的视图模型,并使用EditorFor来呈现嵌套的视图模型,我想将remoteAttribute添加到一个viewmodel(ConcreteViewModelA :: prop3)中的一个属性进行验证。但是,在验证Controller操作方法上,所有我得到的都是null。

我尝试过使用Validate([Bind(Prefix =“item”)] string prop3),但仍然返回NULL。任何想法?

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)
    }        
}

2 个答案:

答案 0 :(得分: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
    );
}

答案 1 :(得分:0)

用firebug检查。您的网址请求如下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