0

レジスタ ビューのすべてのフィールドで同じモデル エラー メッセージが表示されます。Register Post メソッドのコードは次のとおりです。

    [CaptchaMvc.Attributes.CaptchaVerify("Captcha is not valid")]
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterRequest model)
    {
        if (ModelState.IsValid)
        {

            if (Membership_BAL.UsernameExist(model.UserName.Username))
            {
                ModelState.AddModelError("CustomError", "Usename is taken");

                return View();
            }

            if (Membership_BAL.EmailExist(model.EmailAddress.EmailAddress))
            {
                ModelState.AddModelError("CustomError", "Email Address is taken");
                return View();
            }

            if (
                !Membership_BAL.CamparaEmailAddress(model.EmailAddress.EmailAddress,
                    model.EmailAddress.ComfirmEmailAddress))
            {
                ModelState.AddModelError("CustomError", "Email Address must match");
                return View();
            }


            Membership_BAL.Register(model);
            // TODO: Redirect use to profile page
            return RedirectToAction("Index", "Home");
        }

        TempData["Message"] = "Error: captcha is not valid.";
        return View();
    }

これがビューです

@using (Html.BeginForm()) 
{
@Html.AntiForgeryToken()

<fieldset>
    <legend> Register Form</legend>
    <ol>
        <li>
            @Html.LabelFor(m => Model.UserName.Username)
            @Html.EditorFor(m => Model.UserName.Username)
            @Html.ValidationSummary()
        </li>
        <li>
            @Html.LabelFor(m => Model.FirstName)
            @Html.EditorFor(m => Model.FirstName)
        </li>
        <li>
            @Html.LabelFor(m => Model.LastName)
            @Html.EditorFor(m => Model.LastName)
        </li>
        <li>
            @Html.LabelFor(m => Model.EmailAddress.EmailAddress)
            @Html.EditorFor(m => Model.EmailAddress.EmailAddress)
            @Html.ValidationSummary()
        </li>
        <li>
            @Html.LabelFor(m => Model.EmailAddress.ComfirmEmailAddress)
            @Html.EditorFor(m => Model.EmailAddress.ComfirmEmailAddress)
            @Html.ValidationSummary()
        </li>
        <li>
            @Html.MathCaptcha()
           @TempData["Message"]
        </li>
    </ol>

    <input type="submit" value="Register">

</fieldset>
}
4

2 に答える 2

3

ビューやモデルが見えないのは静かですが、問題はこの行に関連していると確信しています

ModelState.AddModelError("CustomError", "Email Address must match");

このメソッドの最初のパラメーターは、エラーを表示するフィールド名を受け取ります。アクションで、すべてのエラーがフィールド内で同じ名前を持っていることがわかります。

これを変更する必要があります:

ModelState.AddModelError("CustomError", "Email Address must match");

為に:

//Assuming that the field it's called Email    
ModelState.AddModelError("Email", "Email Address must match"); 

モデルの各要素についてなど

于 2013-10-14T22:19:14.633 に答える
0

これを試して

         if (ModelState.IsValid)
        {
         bool valid=true;
        if (Membership_BAL.UsernameExist(model.UserName.Username))
        {
            ModelState.AddModelError("CustomError", "Usename is taken");

            valid=false;
        }

        if (Membership_BAL.EmailExist(model.EmailAddress.EmailAddress))
        {
            ModelState.AddModelError("CustomError", "Email Address is taken");
             valid=false;
        }

        if (
            !Membership_BAL.CamparaEmailAddress(model.EmailAddress.EmailAddress,
                model.EmailAddress.ComfirmEmailAddress))
        {
            ModelState.AddModelError("CustomError", "Email Address must match");
             valid=false;
        }
       if (!valid)
       {
          return view();
        }

        Membership_BAL.Register(model);
        // TODO: Redirect use to profile page
        return RedirectToAction("Index", "Home");
    }
于 2013-10-14T21:58:43.597 に答える