我有一个动作创建和方法保存。 create动作只显示如下所示的视图
public ActionResult Create()
{
return view();
}
在创建视图中,我得到的名称,地址等字段很少。一旦用户输入数据并单击保存按钮,我就会使用ajax调用调用Save方法。 在Save方法中,我正在验证数据:
[HttpPost]
public bool Save(UserModel User)
{
if (ModelState.IsValid)
{
// save the data
return true;
}
else
{
return false;
}
}
此方法的响应用于创建视图的ajax:
$(function () {
$("#btnSave").click(function () {
$.ajax({
type: "POST",
contentType: "application/json;charset=utf-8",
url: "/Contoller/Save",
data:
// parameters
async: false,
success: function (data_l) {
if (data_l == true)
{
alert("record has been saved in database");
window.location.href = "@Url.Action("Index","Controller")";
}
else{
alert ("Invalid Entry");
window.location.href = "@Url.Action("Create","Controller")";
}
},
error: function () {
console.log("there is some error");
}
});
});
我想要实现的是基于Save方法的响应,我应该执行两个操作。如果数据已正确验证,则会保存数据并加载索引页。如果验证失败,我想显示创建视图,其中包含输入的字段以及验证消息。 我确信数据注释属性在模型中正确使用。有人可以帮我解决这个问题。
答案 0 :(得分:1)
我建议您在服务器端执行验证,即在控制器中执行验证。首先执行输入验证,如果一切正常,则将数据保存在持久存储中。如果数据保存成功,则加载索引视图或列表视图(无论哪种视图返回View()或RedirectToResult())。如果有任何问题,请在ModelState对象中添加错误并返回相同的视图。在客户端,错误将与用户已输入的数据一起显示。
有关示例,请参阅下面的代码段(可能还有其他方法,但这是我们目前使用的方式):
public ActionResult AddNewSearch(SearchViewModel searchModel)
{
if (User.Identity.IsAuthenticated)
{
if (ModelState.IsValid)
{
var organizationUser = this.GetUser();
if (organizationUser == null)
{
ModelState.AddModelError("RecordNotFound", string.Format("No organization user found!!!"));
return RedirectToAction("LogOff", "Account");
}
if (this.searchService.GetUserSearch(organizationUser.Id, searchModel.Name) != null)
{
ModelState.AddModelError("RecordAlreadyExists", string.Format("Search already exists!!!"));
return View(searchModel);
}
var userSearchDomainModel = mappingService.Map<SearchViewModel, Search>(searchModel);
searchService.AddUserSearch(organizationUser, userSearchDomainModel);
return RedirectToAction("Index", "Search");
}
}
return RedirectToAction("Index", "Search");
}