MVC ModelStatus错误未在视图中显示?

时间:2014-06-05 04:10:26

标签: .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor-2

这是我的行动:

public virtual ActionResult DeleteClass(int id)
    {
           var Model = service.AllClasses();
            MergeModelState(service.Exceptions);  // Please see below description
            return RedirectToAction("Index",Classes);
        }

修改 我的观看代码在这里:

@using Scripts = System.Web.Optimization.Scripts
@model List<Demo.CustomTypes.Class>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
<div class="row">
    <div class="col-md-12">
        <div class="table-responsive">
            @if (Model != null && Model.Count > 0)
            {
                <table class="table table-hover table-striped">
                    <tr>
                        <td>Name</td>
                        <td>Location</td>
                        <td>Teacher</td>
                        <td></td>
                        <td></td>
                    </tr>
                    @foreach (var itm in Model)
                    {
                        <tr>
                            <td>@Html.ActionLink(@itm.Name,MVC.CodeTest.Students().AddRouteValue("id",@itm.ClassID))</td>
                            <td>@itm.Location</td>
                            <td>@itm.Teacher</td>
                            <td>
                                @Html.ActionLink("Edit",MVC.CodeTest.EditClass().AddRouteValue("id",itm.ClassID))
                                <br/>
                            </td>
                            <td>
                                @Html.ActionLink("Delete",MVC.CodeTest.DeleteClass().AddRouteValue("id",itm.ClassID))
                                <br/>
                            </td>
                        </tr>

                    }
                </table>
                <div class="col-md-12">
                                @Html.ActionLink("Add",MVC.CodeTest.AddClass())
                                <br/>

                </div>

            }

        </div>
    </div>
</div>
}

在操作中我使用MergeModelState添加错误(字符串键,字符串消息),然后我想在视图中显示它但在视图中我没有收到任何错误/验证消息。在Immidiate Windows中我可以看到在ModelState中添加了错误。请帮忙。

编辑2:

这是我在ModelState中添加错误的方法。它在BaseController类中,我的控制器正在吸收这个类。

public class BaseContoller : Controller
    {
        public void MergeModelState(List<ExceptionPairs> exceptions )
        {
            foreach (var exception in exceptions)
            {
                ModelState.AddModelError(string.Empty, exception.Message);
            }

        }
    }

2 个答案:

答案 0 :(得分:2)

您必须在表单元素中包含@Html.ValidationSummary()才能显示它。请参阅MVC源代码中的以下片段(无形式,无消息!)

private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary<string, object> htmlAttributes, string tag)
{
  string modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation();
if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null)
{
  return null;
}

答案 1 :(得分:0)

模型错误仅显示当前控制器的视图。 即 - 我们无法使用return RedirectToAction("Index",Classes);

你必须使用return view (model); 然后只有视图显示模型中的错误。