2014-01-19 92 views
1

我有一个场景,我有一个部分的视图,通过$.get加载。该部分具有下面的代码:MVC 4服务器端验证没有显示

@model MvcApplication1.Models.CmaPartialModel      
@using (Ajax.BeginForm("TestPost", new AjaxOptions { HttpMethod = "Post" })) 
{     

    @Html.ValidationSummary() 
    for(var i = 0; i < Model.DataItemsWithLabels.Count; i++) 
    {      
      @Html.LabelFor(m => m.DataItemsWithLabels[i].DataName,Model.DataItemsWithLabels[i].DataName) 
      @Html.TextBoxFor(m => m.DataItemsWithLabels[i].DataValue) 
      @Html.ValidationMessageFor(m => m.DataItemsWithLabels[i].DataValue,"data value error") 

      @Html.TextBoxFor(m => m.DataItemsWithLabels[i].DataName) 
      @Html.ValidationMessageFor(m => m.DataItemsWithLabels[i].DataName,"data name error") 
    } 

<input type="submit" value="Save" />   
} 

我控制器操作是:

[HttpPost] 
    public ActionResult TestPost(CmaPartialModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // code removed for quesiton 
     } 
     else 
     { 
      ModelState.AddModelError("E!", "Want to display this!");    
     } 
     return PartialView("Transaction", model);        
    } 

一切工作按预期在客户端验证的条款。

但是,我没有显示控制器中添加的错误。

我在做什么错?

编辑

我已经改变了控制器动作inlcude:ViewBag.Error = "error message";

而且partioal视图包括@ViewBag.Error - 这不是upating无论是。这可能是AJAX的问题吗?

回答

0

泰克斯向迪恩求助。只是想明确说明我没有正确使用Ajax.BeginForm。我的观点应该是这个样子的:

<div id="form"> 
@using (Ajax.BeginForm("TestPost", new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "form" ))} 
{ 
    // form stuff here 
} 
<div> 

的形式不与任何更新 - 不只是错误,因为我没有UpdateTargetId

0

AddModelError的第一个参数在这里很重要。它用于确定错误适用于模型的哪个部分。

您指定E!它,给它包含的东西是不是一个合法的C#标识符,可能不会映射到你的模型的任何部分!

如果您想要添加一般错误,请使用string.Empty作为第一个参数。您应该会发现它显示在您的验证摘要中。

+0

感谢。对不起,没有喜悦。我已经注意到,即使我在控制器方法中设置了ViewBag.Property并尝试显示它,它也不会显示。如果我调试,价值在那里,但表单不更新。我想知道这是否是一个AJAX问题。 – davy

+0

我已更新该问题。 – davy

+1

你能检查提琴手,看看有什么回应?我想知道当您执行POST时,响应是否不会替换包含元素中的内容?见http://stackoverflow.com/questions/7908357/returning-data-to-a-partial-view –