2014-05-06 107 views
2

在我的應用程序中,我使用簡單的查看驗證,客戶端和服務器端驗證,工作正常,但現在我已經改變爲引導模態和PartialView。
問題是,客戶端驗證dos不再工作,並且對於服務器端驗證,當我單擊提交時,他將我重定向到新頁面(請參閱圖片),而不是在當前模式彈出窗口中顯示錯誤。 enter image description hereASP.net MVC 4驗證在引導模式和部分視圖

Create Controller

[HttpGet] 
     public ActionResult Create() 
     { 
      ViewBag.CAT_ID = new SelectList(db.CATEGORIE, "CAT_ID", "LIBELLE"); 
      ViewBag.C_GARANT = new SelectList(db.GARANTIE, "C_GARANT", "LIB_ABREGE"); 
      return PartialView("_Create"); 
     } 

     // 
     // POST: /Taux/Create 

     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create(TAUX taux) 
     { 
      if (ModelState.IsValid) 
      { 
       db.TAUX.Add(taux); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.CAT_ID = new SelectList(db.CATEGORIE, "CAT_ID", "LIBELLE", taux.CAT_ID); 
      ViewBag.C_GARANT = new SelectList(db.GARANTIE, "C_GARANT", "LIB_ABREGE", taux.C_GARANT); 
      return PartialView("_Create", taux); 
     } 

_Create管窺:

@model pfebs0.Models.TAUX 
<div class="modal-content"> 
<div class="modal-header"> 
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 
    <h3 id="CreateTaux">Add</h3> 
</div> 
@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 


    <div class="modal-body"> 
     <div class="form-group"> 
      <div class="form-group"> 
      <label for="Categorie">Categorie : </label> 
      @Html.DropDownList("CAT_ID", String.Empty) 
      @Html.ValidationMessageFor(model => model.CAT_ID) 
      </div> 
      //Other Form input. 
     </div> 
     <div class="modal-footer"> 
      <button type="submit" class="btn btn-default">Submit</button> 
     </div> 
} 

</div> 
    <script> 
      $("select").addClass("form-control"); 
      $("input").addClass("form-control"); 
      $("label").addClass("control-label"); 
    </script> 
@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") } 

Index View,我puted模態:

<p> 
     @Html.ActionLink("Ajouter", "Create", "Taux", 
       new { id = "btnAdd", @class="btn btn-default"}) 
</p 

     <div id="modalDiv" class="modal fade" > 
      <div class="modal-dialog"> 
       </div> 
     </div> 
    @section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
<script type="text/javascript"> 
    $(function() { 

     $.ajaxSetup({ cache: false }); 

     $('#btnAdd').click(function() { 
      $('.modal-dialog').load(this.href, function() { 
       $('#modalDiv').modal({ 
        backdrop: 'static', 
        keyboard: true 
       }, 'show'); 
      }); 
      return false; 
     }); 
    }); 
</script> } 

所以我必須添加或陳ge在我的模式中進行客戶端驗證,並將服務器驗證重定向到模式,而不是像圖片一樣的新頁面?

+0

我認爲你需要重新解析驗證器爲你的新的HTML元素dinamically加載:http://stackoverflow.com/questions/6691958/unobtrusive-jquery-validation-on-elements-created-by-javascript- mvc3另外,您可能需要將'Html.BeginForm'設置爲'Html.BeginForm(action,controller,method,null)',以避免奇怪的查詢字符串。 –

+0

@ALMMa感謝您的驗證我解決了這個問題,但鋼鐵重定向問題如何解決它? – Chlebta

+0

@Chlebta你有沒有得到這個解決方案,它不會將您重定向到新頁面,並實際顯示服務器端驗證?我有同樣的問題。 –

回答

0

您可以依靠角色和數據目標屬性的內置引導功能。如果您將模態的角色定義爲「對話框」併爲其指定一個標識符,那麼您可以在具有數據對象和數據切換屬性的HTML按鈕中引用它。

您還需要避免從ajax請求中加載_Create部分。只需使用@ Html.Partial將其與索引一起加載即可。如果屬性設置正確,它不會出現在您的視圖中。

下面是我沒有得到它的工作步驟:

首先修改_index加載局部視圖和更新您的modalDiv定義角色。

<div class="modal fade" id="modalDiv" tabindex="-1" role="dialog" aria-hidden="true"> 
@Html.Partial("~/{PathToView}/_Create.cshtml", new pfebs0.Models.TAUX()) 
</div> 

現在不是使用@HtmlActionLink和JavaScript加載對話框,而是按如下方式創建一個按鈕。確保刪除JS點擊事件代碼。

<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#modalDiv">Ajouter</button> 

現在引導將處理和顯示與定義的角色和數據屬性和MVC驗證自動隱藏對話框將正確顯示。你可以保留你的控制器代碼。