0

かみそり:

@Html.TextBoxFor(kod => kod.Name)
@Html.ValidationMessage("Name","Client Error Message")

コントローラ:

[HttpPost]
    public JsonResult JsonAddCustomer(Customers customer, string returnUrl)
    {
        if (customer.Name.Trim().Length == 0)
        {
            ModelState.AddModelError("Name", "Server Error Message");
        }

        //Eğer hata yoksa veri tabanına kayıt yapılıyor.
        if (ModelState.IsValid)
        {
            try
            {
                CusOpp.InsertCustomer(customer);
                return Json(new { success = true, redirect = returnUrl });
            }
            catch (Exception e)
            {
                ModelState.AddModelError("", "Error");
            }
        }

        return Json(new { errors = GetErrorsFromModelState() });
    }

検証エラーメッセージを書きたいです。上記のようにこれを行いましたが、@Html.ValidationMessage("Name","Client Error Message")機能しません。実際、私はすでにそれを期待していました。

このステートメントの結果のように表示したいのですが@Html.ValidationMessageFor(m => m.name)、entity-data-model を使用したため、これを使用することはできません。

[Required]データモデルクラスにステートメントを追加するか、これを行う方法を追加する必要があります。説明が悪くてすみません。

ありがとう。

4

2 に答える 2

2

この場合、JSON ではなく PartialViews を返す必要があります。成功した場合にのみ、JSON を返すことができます。

[HttpPost]
public ActionResult JsonAddCustomer(Customers customer, string returnUrl)
{
    // Warning: the following line is something horrible => 
    // please decorate your view model with data annotations or use
    // FluentValidation.NET to validate it. 
    // Never write such code in a controller action.
    if (customer.Name.Trim().Length == 0)
    {
        ModelState.AddModelError("Name", "Server Error Message");
    }

    //Eğer hata yoksa veri tabanına kayıt yapılıyor.
    if (ModelState.IsValid)
    {
        try
        {
            CusOpp.InsertCustomer(customer);
            return Json(new { success = true, redirect = returnUrl });
        }
        catch (Exception e)
        {
            ModelState.AddModelError("", "Error");
        }
    }

    return PartialView(customer);
}

AJAX リクエストの成功コールバック内で、POST アクションが成功したかどうかをテストできます。

success: function(result) {
    if (result.redirect) {
        // we are in the success case => redirect
        window.location.href = result.redirect; 
    } else {
        // a partial view with the errors was returned => we must refresh the DOM
        $('#some_container').html(result);

        // TODO: if you are using unobtrusive client side validation here's 
        // the place to call the $.validator.unobtrusive.parse("form"); method in order 
        // to register the unobtrusive validators on the newly added contents
    }
}

これは、あなたも読むかもしれない同様の投稿です。

于 2012-06-29T12:02:11.723 に答える
0

モデルに Required アノテーションを付けたアイデアは良いアプローチです。Requiredアノテーションにエラーメッセージを設定できます。

[Required(ErrorMessage = "Please enter a name")]

あなたのアクションであなたのifを削除してください..これ:

if (customer.Name.Trim().Length == 0)
        {
            ModelState.AddModelError("Name", "Server Error Message");
        }

ModelState.IsValidは、クライアント側とサーバー側でジョブを実行します。

ビューで@Html.ValidationMessageFor(m => m.name)を使用します

于 2012-06-29T12:09:20.587 に答える