Asp.net mvc 4 在telerik窗口中编辑数据时如何显示验证错误?

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 @*

我有一个视图,显示了一些使用局部视图显示的用户信息。 我必须包括的可能性,以更新与弹出窗口的信息。 我还希望我的弹出窗口使用局部视图

如果保存时一切正常,我希望刷新用户信息,或者我希望弹出窗口显示验证错误(如果有)

我试着用一个telerik窗口来弹出窗口

当验证错误发生时,一切正常。 在这种情况下,将在目标div中填充edition部分视图,而不是作为弹出窗口,用我的edition视图替换我的用户信息

我该怎么解决这个问题

以下是主要观点:

@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);
    }
});