6
public class UserModel
    {
        public LogOnModel LogOnModel { get; private set; }
        public RegisterModel RegisterModel { get; private set; }
    }

私のRegisterModelには、次のようなメールアドレスがあります。

[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")]
        [Required]
        [Display(Name = "E-mail")]
        [Remote("IsEmailAddressAvailable", "Validation", HttpMethod = "POST")]
        public string EmailAddress { get; set; }

私のvalidationController:

public class ValidationController : Controller
    {
        public JsonResult IsEmailAddressAvailable([string emailAddress)
        {
            return Json(false, JsonRequestBehavior.AllowGet);

        }
}

ビュー@ModelはUserProfileであり、ValidationControllerのemailAddressはnullです。

運が悪かったので、ValidationControllerを次のように変更しようとしました。

public class ValidationController : Controller
    {
        public JsonResult IsEmailAddressAvailable([Bind(Include = "EmailAddress")]RegisterModel register)
        {
            return Json(false, JsonRequestBehavior.AllowGet);

        }


    }
4

4 に答える 4

12

Bind属性の使用についてのあなたの考えは正しいです。Includeパラメーターを使用する代わりに、 Prefixパラメーターを使用する必要があります。したがって、コントローラーは次のようになります。

public class ValidationController : Controller
    {
        public JsonResult IsEmailAddressAvailable([Bind(Prefix = "RegisterModel.EmailAddress")]string EmailAddress)
        {
            return Json(false, JsonRequestBehavior.AllowGet);

        }
    }

したがって、プレフィックスパラメータは、ブラウザから送信されたパラメータをアクションパラメータにバインドします。

于 2012-10-18T21:43:53.393 に答える
3

これはモデルバインディングの問題であると思われます。アクション シグネチャを次のように変更してみてください。

public class ValidationController : Controller
{
    public JsonResult IsEmailAddressAvailable([Bind(Prefix="RegisterModel")]string emailAddress)
    {
        return Json(false, JsonRequestBehavior.AllowGet);
    }
}

に注意して[Bind(Prefix="RegisterModel")]ください。これは、後者の試みでやろうとしていたことと少し似ていたので、正しい方向に進んでいたと思います。私は基本的に、ここに投稿された非常によく似た回答からこれを引き出したので、これでうまくいかない場合は、そのトレイルがさらに役立つかもしれません。

于 2012-10-17T16:59:18.737 に答える
1

私の頭に浮かぶ理由は、別のモデル (RegisterModel) を別のモデルのプロパティ (UserModel) として持っているため、Htmlヘルパーを使用してモデル プロパティを次のようにレンダリングするときです。

@Html.TextBoxFor(x=>x.RegisterModel.EmailAddress)

それはそれを次のようにレンダリングします

<input type="text" name="RegisterModel.EmailAddress"/>

MVCモデル バインディングは名前プロパティで機能しstring emailAddress、最初の例で受信していますRegisterModel model。2 回目の試行でUserModel modelは、リモート検証 ActionResult の受信パラメーターとしてを使用してみてください。

public JsonResult IsEmailAddressAvailable(UserModel model)
        {
            return Json(false, JsonRequestBehavior.AllowGet);

        }
于 2012-10-12T05:13:13.093 に答える
0

true (検証に合格) を返すか、バリデーターでエラー メッセージの文字列を返す必要があります。ここを参照してください: http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx

public class ValidationController : Controller {
    public JsonResult IsEmailAddressAvailable(string EmailAddress) {
        return Json("Email Address unavailable", JsonRequestBehavior.AllowGet);
    }
}
于 2012-10-18T21:57:18.727 に答える