0

次の場合、別の要素のクラスを変更することはでき!ModelState.IsValidますか?

以下に簡略化した私の見解は、各フィールドを<div class="control">包み込んでいます<input>

@using(Html.BeginForm("AddRole","Admin", FormMethod.Post, new { @class = "ajax" })) {
    <div class="control">
        @Html.TextBoxFor(x => x.Role, new { @class = "input-xlarge", @placeholder = Html.DisplayNameFor(x => x.Role)})
        @Html.ValidationMessageFor(x => x.Role)
    </div>
}

$(function () {
    $('form.ajax').submit(function () {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (result) {
                if (result.success) {
                    location.reload(true);
                } else {
                    $(this).html(result);
                }
            }
        });
        return false;
    });
});

と私のコントローラー...

[HttpPost]
public ActionResult AddRole(RoleModel model) {
    if(!ModelState.IsValid) {
        return PartialView("_AddRolePartial", model);
    }
    try {
        System.Web.Security.Roles.CreateRole(model.Role);
        return Json(new {success = true});
    } catch(Exception) {
        ModelState.AddModelError("", "Role creation unsuccessful.");
    }

    return PartialView("_AddRolePartial", model);
}

モデル内の無効なプロパティのクラスerrorを追加できるようにしたいと思います。div.control私はajax成功イベントでjQueryを介してこれを処理できると思いますが、おそらく一緒にもっと良い解決策があります。

4

1 に答える 1

2

あなたが達成しようとしているのは、コントローラーとビューの間の結合を導入することです。これは、MVC (関心の分離) の背後にある考え方に根本的に反しています。コントローラーはビューについて何も認識してはならないため、ビューで jQuery/javascript を使用してこれを行うことを強くお勧めします。無効なプロパティの名前を含むビューバッグを返し、jquery を使用してエラー クラスを追加するだけです。

于 2012-09-08T06:17:28.783 に答える