MVC 4服务器端验证未显示

时间:2014-01-19 13:19:18

标签: asp.net-mvc validation asp.net-mvc-4

我有一个场景,我有一个部分通过$.get加载的视图。 partial具有以下代码:

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

在客户端验证方面,一切都按预期工作。

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

我做错了什么?

修改

我已将控制器操作更改为包括:ViewBag.Error = "error message";

包含@ViewBag.Error的部分视图 - 这也没有提升。这可能是AJAX的一个问题吗?

2 个答案:

答案 0 :(得分:0)

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

您指定了E!,如果它包含的内容不是有效的C#标识符,则可能不会映射到模型的任何部分!

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

答案 1 :(得分:0)

向迪恩求助。只是想说清楚我没有正确使用Ajax.BeginForm。我的观点应该是这样的:

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

表单没有更新任何内容 - 不只是错误,因为我没有UpdateTargetId