我使用以下代码:
public string RenderPartialToString(ControllerContext context, string partialViewName, ViewDataDictionary viewData, TempDataDictionary tempData)
{
ViewEngineResult result = ViewEngines.Engines.FindPartialView(context, partialViewName);
if (result.View != null)
{
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter output = new HtmlTextWriter(sw))
{
ViewContext viewContext = new ViewContext(context, result.View, viewData, tempData, output);
result.View.Render(viewContext, output);
}
}
return sb.ToString();
}
return String.Empty;
}
通过JSON返回部分视图和表单。它可以正常工作,但是一旦我得到模型状态错误,我的ValidationSummary就不会显示。 JSON仅返回默认表单,但不突出显示验证错误或显示验证摘要。
我错过了什么吗?
这就是我调用RenderPartialToString的方式:
string partialView = RenderPartialToString(this.ControllerContext, "~/Areas/User/Views/Account/ChangeAccountDetails.ascx", new ViewDataDictionary(avd), new TempDataDictionary());
答案 0 :(得分:3)
在这个问题上花了太多时间之后,我发现不应该将ModelState
项添加到viewContext.Controller.ViewData.ModelState
,而应将其添加到viewContext.ViewData.ModelState
。进行此更改后,正在呈现ModelState
错误。
答案 1 :(得分:2)
我遇到了类似代码的相同问题:
添加以下行时所有修复:
// copy model state items to the html helper
foreach (var item in context.Controller.ViewData.ModelState)
html.ViewData.ModelState.Add(item);
如果我为这个特定场景做了一个端口,那就像
ViewContext viewContext = new ViewContext(context, result.View, viewData, tempData, output);
//Copy the ModelSate
foreach (var item in context.Controller.ViewData.ModelState)
viewContext.Controller.ViewData.ModelState.Add(item);
result.View.Render(viewContext, output);
答案 2 :(得分:0)
这就是我做的工作:
foreach (var item in context.Controller.ViewData.ModelState)
{
viewContext.Controller.ViewData.ModelState.Add(item);
}
不确定为什么我需要{}的..
答案 3 :(得分:0)
我在上述评论中提到的所有解决方案都存在一些问题,因此我对其进行了一些改进,以确保它在所有可能的情况下都能正常运行:
foreach (var item in controllerContext.Controller.ViewData.ModelState)
{
if (item.Value.Errors.Any())
{
viewContext.ViewData.ModelState.Add(item);
}
}