2012-11-16 85 views
1

当我在控制器中生成错误并返回视图时,验证摘要不显示。所有工作正常从视图本身产生的错误。我们如何使摘要显示出来?验证摘要不显示控制器中生成的错误

这里的简化控制方法:

[HttpPost] 
public ActionResult EditProfil(Prospect prospect) 
{ 
    ModelState.AddModelError(string.Empty, "You have an error"); 

    if (!ModelState.IsValid) 
     return View("Edit", prospect); 

    return Json(prospect); 
} 

和视图看起来是这样的:

@model Prospect 

@{ 
    ViewBag.Title = "Profil du prospect"; 
    Layout = null; 
} 

//Some javascript and CSS unrelated to validations 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(false) 
    //My form controls... 
} 
+0

*所有工作正常,从视图本身*你能eloborate产生的错误?从上面的代码 – VJAI

+0

一切看起来不错...我猜测与验证错误的标记获取呈现给页面,但一些JavaScript/CSS隐藏它 - 你可以检查它? – pkmiec

+0

@Mark Sure。如果我在我的模型中有验证(如所需的属性),验证摘要将显示我的错误消息。如果我不使用模型属性,但在控制器中测试相同的东西,则错误不会显示 – Mathieu

回答

3

编辑

问题是

ModelState.AddModelError(string.Empty, "You have an error"); 
01组合

@Html.ValidationSummary(false) 

一个空字符串是""这是interperted作为属性名称,事件还以为这是一个空字符串。从呈现摘要中删除布尔型false或将null传递到模型状态包。

+1

如果ModelState无效,您是否看到他正在返回视图 – VJAI

+0

@标记您的权利,我错过了: /我会更新我的anwser。 –

2

随着MVC4,通过nullModelState.AddModelError是无效的。

ModelState.AddModelError(string.Empty, "Error"); 

@Html.ValidationSummary(false) 

原来我有两个问题:这实际使用工作。

  1. 我回来了错误的观点。
  2. 我正在使用Ajax调用,并没有更新div

下解决了这个问题对我来说:

<div id="results"> 
    @{ 
    using (Ajax.BeginForm("CreateLookupTable", "Lookup", new AjaxOptions { HttpMethod = "POST", OnSuccess = "FormSuccess()", UpdateTargetId ="results" })) 
    { 
     @Html.ValidationSummary(false) 

     // Form 
    } 
    </div> 
相关问题