所以我有一个页面上有几个表格,其中一个表格是一个有三个功能的地址。另存为新的,更新和删除。我想使用form.submit()在客户端和服务器端激活MVC验证,但我不希望整个页面刷新。
所以这就是我想要使用简单的form.submit()来收集元素并将其作为模型发送到ASP.net MVC控制器并根据我在模型上使用的属性处理验证并使用一个回调来处理JSON响应以仅更新受影响的区域。
我知道我可以使用jQuery创建一个AJAX post请求,但我必须处理所有事情,即绑定到viewmodel,验证并创建请求本身。无论如何,我可以充分利用这两种方法吗?
答案 0 :(得分:5)
另外请不要忘记在Controller中的Post方法中检查
if(ModelState.IsValid)
因为如果您在任何浏览器中使用ctr + shift + i,客户端验证也不会验证隐藏字段,并且您将删除@Html.EditorFor(model => model.Price)
客户端验证将不验证此属性。
答案 1 :(得分:4)
在MVC中,一旦使用DataAnnotations属性验证模型数据,您已经完成了服务器端验证,然后您可以使用jQuery.validation library
在客户端进行验证。
在这里你可以使用Ajax.BeginForm帖子,你可以使用ajax post来利用DataAnnotations验证。
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 library
<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>
}