2

所以我有一个页面,上面有一些表格,其中一个表格是一个具有三个功能的地址。另存为新,更新和删除。我想使用 form.submit() 在客户端和服务器端触发 MVC 验证,但我不想刷新整个页面。

所以这就是我想使用简单的 form.submit() 来收集元素并将其作为模型发送到 ASP.net MVC 控制器并根据我在模型上拥有的属性处理验证并使用回调处理 JSON 响应以仅更新受影响的区域。

我知道我可以使用 jQuery 创建 AJAX 发布请求,但我必须处理所有事情,即绑定到视图模型、验证和创建请求本身。无论如何我可以充分利用这两种方法吗?

4

2 回答 2

5

也不要忘记在 Controller 的 Post Method 中检查

if(ModelState.IsValid) 

因为客户端验证也不会验证隐藏字段,如果您将在任何浏览器中使用 ctr+shift+i 并且您将删除 @Html.EditorFor(model => model.Price)客户端验证将不会验证此属性。

于 2014-02-27T08:47:12.107 回答
4

在 MVC 中,一旦您使用 DataAnnotations 属性验证模型数据,您已经完成了服务器端验证,然后您可以使用jQuery.validation library它在客户端进行验证。

在这里,您可以使用 Ajax.BeginForm 帖子,您可以在其中使用 DataAnnotations 验证和 ajax 帖子。

DataAnnotations 属性

   public class Movie {
    public int ID { get; set; }

    [Required]
    public string Title { get; set; }

    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }

    [Required]
    public string Genre { get; set; }

    [Range(1, 100)]
    [DataType(DataType.Currency)]
    public decimal Price { get; set; }

    [StringLength(5)]
    public string Rating { get; set; }
}

jQuery.validation 库

 <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>    
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>    
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

带有验证的表单

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))
   {
        <fieldset>
            <legend>Movie</legend>

            <div class="editor-label">
                @Html.LabelFor(model => model.Title)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Title)
                @Html.ValidationMessageFor(model => model.Title)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.ReleaseDate)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.ReleaseDate)
                @Html.ValidationMessageFor(model => model.ReleaseDate)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.Genre)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Genre)
                @Html.ValidationMessageFor(model => model.Genre)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.Price)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Price)
                @Html.ValidationMessageFor(model => model.Price)
            </div>
            <div class="editor-label">
        @Html.LabelFor(model => model.Rating)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Rating)
        @Html.ValidationMessageFor(model => model.Rating)
    </div>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }

资源:http ://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model

于 2014-02-27T06:48:27.757 回答