asp.net mvc中编辑器模板中的远程属性

时间:2013-06-25 21:37:03

标签: .net asp.net-mvc asp.net-mvc-validation

我在Country类(Model)中有以下两个属性。

public class Country
{
        [HiddenInput(DisplayValue = false)]
        public int Id { get; set; }

        [Required]
        [Remote("CheckName", "Country", AdditionalFields = "Id")]
        public string Name { get; set; }
}

上面我希望将Id传递给CheckName方法。 我在CheckName中使用CountryController方法作为:

public JsonResult CheckCountryName(string Name, int Id = 0)
{
     return Json(!repository.Countries.Where(c => c.Id != Id).Any(c => c.Name == Name), JsonRequestBehavior.AllowGet);
}

我正在使用Country类的编辑器模板@Html.EditorFor(m => m.Country)

Id属性被ID作为Country_Id呈现为隐藏字段,名称为Country.Id。当我编辑名称字段时,CheckName没有获得所需的值(名称变为空,而Id变为0(作为默认值))

我在Fiddler中检查过,请求将作为GET /Country/CheckName?Country.Name=abc&Country.Id=0 HTTP/1.1发送到服务器。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

它正在传递你的模型。因此,JsonResult应该使用您的模型Country,而不是单独使用名称和ID。

像这样:

public JsonResult CheckCountryName(Country country)
{
     return Json(!repository.Countries.Where(c => c.Id != country.Id)
                 .Any(c => c.Name == country.Name), 
                 JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:0)

我改变了我的方法并使用了Bind属性,现在它可以正常工作。

public JsonResult CheckCountryName([Bind(Prefix="Country")]Country oCountry)
{
     return Json(!repository.Countries.Where(c => c.Id != oCountry.Id).Any(c => c.Name == oCountry.Name), JsonRequestBehavior.AllowGet);
}