2012-09-07 55 views
0

!ModelState.IsValid時,是否可以更改另一個元素上的類?當ModelState無效時操作其他元素

我的看法,下面的簡化,將有<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處理這個問題,但也許有更好的解決方案。

回答

2

你試圖實現什麼會引入你的控制器和你的視圖之間的耦合,這基本上是背離MVC(關注點分離)背後的想法。你的控制器不應該知道任何關於你的視圖,所以我強烈建議你在視圖中使用jQuery/javascript來做這件事。只需返回一個包含您的無效屬性名稱的viewbag,並使用jquery添加錯誤類。

相關問題