0

当我打开此页面时(即使是第一次),我总是会收到验证消息,即使我在下拉列表中选择值,消息也不会消失。如果我在两者中都选择值,我可以提交表单,但消息仍然不会消失。

Snippet是 Linq to sql 类并且LanguageIDSnippetTypeID整数,我假设发生这种情况是因为我将空模型传递给 View 所以LanguageID并且SnippetTypeID是 null 并且 AFAIK Linq to Sql 类需要不可为空的整数。

如何解决此问题,以便在用户尝试提交表单之前不会出现验证消息,并且如果选择下拉列表之一以删除验证消息。

看法

@model Data.Snippet
@using (Html.BeginForm("Save", "Submit", FormMethod.Post))
{
    <h1 class="subtitle">Submit new snippet</h1>

    <h4>Title</h4>

    @Html.TextBoxFor(snippet => snippet.Title, new { @class = "form-field" })

    <h4>Language</h4>

    @Html.DropDownListFor(snippet => snippet.LanguageID, new SelectList(@ViewBag.Input.Languages, "ID", "Name", @Model.LanguageID), "Choose Language", new { @class = "form-select" })

    <p>@Html.ValidationMessageFor(snippet => snippet.LanguageID , "You must choose language", new { @class= "validation-message"})</p> 

    <h4>Snipet type</h4>

     @Html.DropDownListFor(snippet => snippet.SnippetTypeID, new SelectList(@ViewBag.Input.SnippetTypes, "ID", "Name", @Model.SnippetType), "Choose snippet type", new { @class = "form-select" })

     <p>@Html.ValidationMessageFor(snippet => snippet.SnippetTypeID,"You must choose snippet type", new { @class= "validation-message"})</p> 

     <h4>Text</h4>

     @Html.TextAreaFor(snippet => snippet.Text, new { cols = "20", rows = "10", @class = "form-field" })

     <input type="submit" value="Submit Snippet" />
}

控制器

        //Controllers are not finished Save() should have
        //code to actually insert to db after I fix validation
        // GET: /Submit/
        //
        public ActionResult Index()
        {
            Snippet model = new Snippet();

            SubmitModel input = new SubmitModel();

            ViewBag.Input = input;

            return View(model);
        }

        public ActionResult Save(Snippet snippet)
        {

            return View();
        }

模型

模型是 Linq to Sql 类。

Snippet
ID (int, identifier)
Title (string)
SnippetType (int, FK on table SnippetTypes)
LanguageID  (int, FK on table Languages)
Text (string)
4

1 回答 1

2

好的,

所以我认为它失败的原因是你添加的自定义 CSS。ValidationMessageFor 将在验证成功时放置一个隐藏类。

如果您想为 CSS 添加自定义颜色或类似的东西,我会考虑将样式应用于包装 p 标签或添加包装 div/span 并将其添加到其中。

您可能只使用在视图上定义您的消息@Html.ValidationMessageFor(snippet => snippet.SnippetTypeID, "ErrorMessage");但是更合适的方法是获取您的模型并为其创建数据注释。

看看这篇文章http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validation-with-the-data-annotation-validators-cs了解更多关于如何做的信息使用数据注释进行模型验证。

另外我会考虑传入自定义类而不是您的 linq to sql 类,以便您可以根据视图进行自定义验证。这些自定义类通常被称为 ViewModel。

于 2012-06-06T15:07:17.637 回答