Asp.net mvc 4 在telerik窗口中编辑数据时如何显示验证错误?
我有一个视图,显示了一些使用局部视图显示的用户信息。 我必须包括的可能性,以更新与弹出窗口的信息。 我还希望我的弹出窗口使用局部视图 如果保存时一切正常,我希望刷新用户信息,或者我希望弹出窗口显示验证错误(如果有) 我试着用一个telerik窗口来弹出窗口 当验证错误发生时,一切正常。 在这种情况下,将在目标div中填充edition部分视图,而不是作为弹出窗口,用我的edition视图替换我的用户信息 我该怎么解决这个问题 以下是主要观点:Asp.net mvc 4 在telerik窗口中编辑数据时如何显示验证错误?,asp.net-mvc-4,popupwindow,telerik-window,Asp.net Mvc 4,Popupwindow,Telerik Window,我有一个视图,显示了一些使用局部视图显示的用户信息。 我必须包括的可能性,以更新与弹出窗口的信息。 我还希望我的弹出窗口使用局部视图 如果保存时一切正常,我希望刷新用户信息,或者我希望弹出窗口显示验证错误(如果有) 我试着用一个telerik窗口来弹出窗口 当验证错误发生时,一切正常。 在这种情况下,将在目标div中填充edition部分视图,而不是作为弹出窗口,用我的edition视图替换我的用户信息 我该怎么解决这个问题 以下是主要观点: @model Models.UserModel @*
@model Models.UserModel
@*包含需要刷新的用户信息部分视图的Div*@
@{Html.RenderAction(“_DisplayUserInfo”,new{UserToDisplayId=Model.UserId});}
@*链接以打开版本弹出窗口*@
@ActionLink(“编辑”,“编辑用户”,新的{UserToEditId=Model.UserId},新的AjaxOptions{UpdateTargetId=“EditUser”,
InsertionMode=InsertionMode.Replace,
OnSuccess=“openPopup()”,
HttpMethod=“GET”}
)
@*Telerik窗口用作弹出窗口,用于显示编辑局部视图*@
@{Html.Telerik().Window())
.Name(“编辑窗口”)
.标题(“编辑控制器信息”)
.内容(@
@使用(Ajax.BeginForm(“_EditUser”),新的AjaxOptions{HttpMethod=“Post”
,UpdateTargetId=“UserInfo”
,OnSuccess=“closePopup()”})
{
}
)
.宽度(400)
.Draggable(真)
.模态(真)
.可见(假)
.Render();
}
函数openPopup(){
$('#EditWindow').data('tWindow').center().open();
}
函数closePopup(){
var窗口=$(“#编辑窗口”).data(“tWindow”);
window.close();
}
以下是显示用户信息的局部视图:
@model Models.UserModel
@Html.DisplayFor(model=>model.FirstName)@Html.DisplayFor(model=>model.LastName)
@DisplayFor(model=>model.JobTitle)
@Html.DisplayFor(model=>model.Email)
以下是用于编辑的局部视图:
@model Models.UserModel
@Html.HiddenFor(model=>model.UserId)
@LabelFor(model=>model.Email)
@EditorFor(model=>model.Email)
@Html.ValidationMessageFor(model=>model.Email)
@LabelFor(model=>model.JobTitle)
@EditorFor(model=>model.JobTitle)
@Html.ValidationMessageFor(model=>model.JobTitle)
这是我的控制器
public ActionResult\u DisplayUserInfo(十进制UserToDisplayId)
{
//在这里我建立了我的模型
//....
//并将其发送回局部视图
返回PartialView(MyUserToDisplay);
}
[HttpGet]
public ActionResult\u EditUser(decimal UserToEditId)
{
//在这里我建立了我的模型
//....
//并将其发送回局部视图
返回PartialView(MyUserToEdit);
}
[HttpPost]
公共操作结果\u编辑用户(UserModel UserToEdit)
{
如果(!ModelState.IsValid)
{
//我猜这就是我做错的地方
返回部分视图(CToEdit);
}
//我在这里存钱
//...
//和重定向
返回RedirectToAction(“_DisplayUserInfo”,new{UserToDisplayId=CToEdit.UserId});
}
所以!经过几个小时的挣扎,我终于找到了解决办法!
不知道这是不是正确的方式,但它做我想要的
在主视图中,我没有将ajax表单结果重定向到第一个部分视图(显示用户信息的部分视图),而是将其重定向到包含弹出窗口的div(我知道,第一步很明显,但我花了几个小时才弄清楚……)
下面是“UpdateTargetId”的更改:
@*Telerik窗口用作弹出窗口,用于显示编辑局部视图*@
@{Html.Telerik().Window())
.Name(“编辑窗口”)
.标题(“编辑控制器信息”)
.内容(@
@使用(Ajax.BeginForm(“_EditUser”),新的AjaxOptions{HttpMethod=“Post”
,UpdateTargetId=“EditUser”
,OnSuccess=“closePopup()”})
{
}
)
.宽度(400)
.Draggable(真)
.模态(真)
.可见(假)
.Render();
}
然后我修改了弹出部分视图,添加了一个隐藏输入,其中包含modelstate是否有效:
@Html.Hidden(“MytestField”,ViewData.ModelState.IsValid)
最后,我修改了ClosePopup()函数,以便仅在modelstate有效时关闭弹出窗口,并添加了一个ajax请求以刷新UserInfo部分视图:
函数ManagePopup(){
}
if ($('MytestField').val() == 'True') {
var window = $('#EditWindow').data('tWindow');
window.close();
}
$.ajax({
type: 'GET',
url: '/UserController/_DisplayUserInfo',
data: { UserToDisplayId : '@Model.UserId' },
cache: false,
success: function (result) {
$('#UserInfo').html(result);
}
});