2014-05-06 62 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验证自动隐藏对话框将正确显示。你可以保留你的控制器代码。