5

AdvertiserNameAvailableリモート検証属性で使用されているこのメソッドがあります。問題は、入力値をメソッドパラメータAdvertiserNameAvailableに渡さずに が呼び出されていることです。メソッドにデバッグを入力すると、パラメーターが常にNameであることがわかります。Namenull

  public JsonResult AdvertiserNameAvailable(string Name)
  {
      return Json("Some custom error message", JsonRequestBehavior.AllowGet);
  }

  public class AdvertiserAccount
  {
      [Required]
      [Remote("AdvertiserNameAvailable", "Accounts")]
      public string Name
      {
          get;
          set;
      }
  }
4

2 に答える 2

15

追加する必要がありました[Bind(Prefix = "account.Name")]

public ActionResult AdvertiserNameAvailable([Bind(Prefix = "account.Name")] String name)
{
    if(name == "Q")
    {
        return  Json(false, JsonRequestBehavior.AllowGet);
    }
    else
    {
        return  Json(true, JsonRequestBehavior.AllowGet);
    }
}

プレフィックスを見つけるには、右クリックして、検証しようとしている入力の要素を調べます。属性を探しnameます:

<input ... id="account_Name" name="account.Name" type="text" value="">
于 2012-11-11T12:20:21.327 に答える
0
[HttpPost]
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public ActionResult AdvertiserNameAvailable(string Name)
  {
    bool isNameAvailable = CheckName(Name);  //validate Name and return true of false
    return Json(isNameAvailable );     
  }

  public class AdvertiserAccount
  {
      [Required]
      [Remote("AdvertiserNameAvailable", "Accounts", HttpMethod="Post", ErrorMessage = "Some custom error message.")]     
      public string Name
      {
          get;
          set;
      }
  }

また、次の点にも注意してください。

ASP.NET MVC が検証メソッドの結果をキャッシュしないようにするには、OutputCacheAttribute 属性が必要です。

したがって[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]、コントローラーアクションで使用してください。

于 2012-11-11T12:25:04.573 に答える